链接
[]
分析
dfs加上一个标记数组
经典dfs代码
#include#include #include using namespace std;#define ll long longll sum,cnt;char m[10][10];int a[10];//用于标记某一列是否被占用过 int n,k;void dfs(int x){//到达第几行了 if(sum==k){ cnt++; return; } if(x>n) return; for(int i=1;i<=n;i++){ if(!a[i]&&m[x][i]=='#'){ a[i]=1; sum++; dfs(x+1); a[i]=0; sum--; } } dfs(x+1);//第x行不要跳到下一行开始找 }int main(){ //freopen("in.txt","r",stdin); while(cin>>n>>k){ sum=0; if(n==-1&&k==-1) break; memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>m[i][j]; sum=0; cnt=0; dfs(1); cout< <