题目描述
棋盘问题
题目思路
代码
#include<iostream>
using namespace std;
char chess[9][9];
int count,mask[9];
int round=0;
void dfs(int n,int m,int row){
if(m==0){
count++;
return;
}
if(row==n){
return;
}
for(int j=0;j<n;j++){
if(chess[row][j]=='#'&&mask[j]==0){
chess[row][j]='1';
mask[j]=1;
dfs(n,m-1,row+1);
mask[j]=0;
chess[row][j]='#';
}
}
dfs(n,m,row+1);
}
int main() {
freopen("in.txt","r",stdin);
int n,m;
while(1){
cin>>n>>m;
if(n==-1&&m==-1) break;
count=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>chess[i][j];
}
}
dfs(n,m,0);
cout<<count<<endl;
}
fclose(stdin);
return 0;
}