poj 1321
来源:互联网 发布:java后端工作累不累 编辑:程序博客网 时间:2024/05/29 15:08
点击打开链接//dfs枚举各种情况#include <iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=10+5;char field[maxn][maxn];int cnt,sum; //已摆放棋子个数及总方案个数int n,k;bool done[maxn]; //记录某一列是否安放棋子void dfs(int s) //s为行数{ if(cnt==k) { sum++; return; } else { if(s>=n) return; else { for(int i=0;i<n;i++) if(field[s][i]=='#'&&!done[i]) { //可以进行安放 done[i]=true; cnt++; dfs(s+1); cnt--; done[i]=false; } dfs(s+1); } }}int main(){ while(scanf("%d%d",&n,&k)==2) { if(n==-1&&k==-1) break; for(int i=0;i<n;i++) scanf("%s",&field[i]); cnt=sum=0; memset(done,false,sizeof(done)); dfs(0); printf("%d\n",sum); } return 0;}
阅读全文