题目地址: http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=1440
类似 N皇后 ,直接 DFS枚举即可。
#include<stdio.h>
#include<string.h>
char map[8][9];
int res;
int y[8],hs[64];
void dfs(int i,int n,int m){
if(!m){
res++;
return;
}
for(;i<n;i++)
for(int j=0;j<n;j++)
if(!y[j])
if(map[i][j]=='#'){
y[j]=1;
dfs(i+1,n,m-1);
y[j]=0;
}
}
int main(){
int i,n,m;
while(~scanf("%d%d",&n,&m),n>0){
for(i=0;i<n;i++)
scanf("%s",map[i]);
memset(y,0,sizeof(y));
res=0;
// 为什么DFS不会TLE,做过 八皇后问题的童鞋应该知道,这种题类似一个全排列
// 而现在这题的大小只有8*8 ,也就是最多 O(8!) 的复杂度
dfs(0,n,m);
printf("%d\n",res);
}
return 0;
}