产品说明书 2018-03-08
深度搜索:棋盘问题http://poj.org/problem?id=1321
<br /><br /><br /><br />//#include<bits/stdc++.h> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<vector> #include<set> #include<map> #include<stack> #include<queue> using namespace std; #define INF 0x3f3f3f3f typedef long long ll; char a[10][10]; int vis[10]; int n,k; int ans,now; void DFS(int m) { if(now==k){ ans++; return ; } if(m==n) return ; for(int i=0;i<n;i++){ if(!vis[i]&&a[m][i]=='#') { vis[i]=1; now++; DFS(m+1); vis[i]=0; now--; } } DFS(m+1); } int main() { while(scanf("%d%d",&n,&k)&&n!=-1&&k!=-1) { memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) scanf("%s",a[i]); ans=now=0; DFS(0); printf("%d\n",ans); } }