poj 1321 棋盘问题 dfs
//思路:标记列是否有棋子,然后逐行搜索;
#include <cstdio> #include <algorithm> #include <iostream> #include <queue> #include <cstring> using namespace std; char data[12][12]; int c,n,k; int visit[12]; int to[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void dfs(int x,int cnt) { if(cnt==k) { c++;return ; } for(int i=x;i<=n;i++) for(int j=1;j<=n;j++) { if(data[i][j]=='#'&&visit[j]==0) { visit[j]=1; dfs(i+1,cnt+1); visit[j]=0; } } } int main() { while(cin>>n>>k) { if(n==-1&&k==-1) break; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>data[i][j]; c=0; dfs(1,0); cout<<c<<endl; } return 0; }
你若是天才,我便是疯子