poj1321 棋盘(dfs)
#include<iostream> #include<cstring> using namespace std; int n,k,bb[8]={0},sum=0; char aa[8][8]; void dfs(int a,int b) { if(b>=n) { if(a==k) sum++; return; } for(int i=0;i<n;i++) { if(!bb[i]&&aa[b][i]=='#') { bb[i]=1; dfs(a+1,b+1); bb[i]=0; } } dfs(a,b+1); } int main() { while(cin>>n>>k) { int q=0; sum=0; memset(bb,0,sizeof(bb)); if(n==-1||k==-1)break; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>aa[i][j]; dfs(0,0); cout<<sum<<endl; } return 0; }