题目
这道题之前写很久,就是写不出来了。注意题意——“要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列”.这道题给我的感觉,很像n皇后问题(提到这个,我差不多已经忘了这个问题了)。这里只需要对行进行递归,对列记录并判断。
#include <iostream>
using namespace std;
int n, k, ans=0;
char maze[8][8];
bool vis[8];
void dfs(int row, int index){
if(row==n){
if(index==k)
ans+=1;
return;
}
for(int i=0; i<n; i++){
if(!vis[i]){
if(maze[row][i]=='#'){
vis[i]=true;
dfs(row+1, index+1);
vis[i]=false;
}
}
}
dfs(row+1, index);
}
int main()
{
while(scanf("%d%d", &n, &k)!=EOF){
if(n==-1 && k==-1)
break;
ans=0;
for(int i=0; i<n; i++){
getchar();
for(int j=0; j<n; j++){
maze[i][j]=getchar();
}
}
dfs(0, 0);
printf("%d\n", ans);
}
return 0;
}