POJ 1321 棋盘问题
DFS
#include#include using namespace std; const int MAX_N=10; int n,k; int k_; char cb[MAX_N][MAX_N]; bool has[MAX_N]; int ans; void dfs(int lin){ if(!k_ || lin>=n) { if(!k_) ans++; return; } for(int j=0;j ){ if(!has[j] && cb[lin][j]=='#') { has[j]=true; k_--; dfs(lin+1); has[j]=false; k_++; } }
// 这个递归不能放到上面的for循环里面(TLE) dfs(lin+1); } int main(){ while(1){ scanf("%d%d",&n,&k); if(n==-1 && k==-1) break; fill(cb[0],cb[0]+MAX_N*MAX_N,'.'); fill(has,has+MAX_N,false); ans=0; // scanf %c why not valid for(int i=0;i){ scanf("%s",&cb[i]); } k_=k; dfs(0); printf("%d\n",ans); } }