题目链接:棋盘问题
简单的dfs,当初细节错误,贡献了一次wa。
#include <stdio.h>
int n,m,ans;
int num[10]; //标记第i列是否遍历
char seat[10][10];
void dfs(int k,int sign){
for(int i=1;i<=n;++i){ //遍历n列
if(seat[k][i]=='#' && num[i]==0){
if(sign==1){
ans++;
continue; //当初这里写的return ,光荣的wa了
}
for(int j=k+1;j<=n;++j){ //进入下面的行数
num[i]=1;
dfs(j,sign-1);
num[i]=0;
}
}
}
}
int main()
{
while(scanf("%d %d",&n,&m) && (n!=-1 || m!=-1)){
for(int i=1;i<=n;++i){
scanf("%s",&seat[i][1]);
num[i]=0;
}
ans=0;
for(int i=1;i<=n;++i) dfs(i,m);
printf("%d\n",ans);
}
return 0;
}