棋盘问题
#include<cstdio> #include<cstdlib> #include<cmath> #include<string.h> #include<algorithm> using namespace std; const int maxn=30; char maps[maxn][maxn]; int vis[maxn]; int n, k, ans, num; void dfs(int m) { if(num==k) { ans++; return; } if(m>=n)return; for(int i=0; i<n; i++) { if(!vis[i]&&maps[m][i]=='#') { num++; vis[i]=1; dfs(m+1); vis[i]=0; num--; } } dfs(m+1); } int main() { while(scanf("%d %d", &n, &k), n!=-1 || k!=-1) { ans=0, num=0; for(int i=0; i<n; i++) scanf("%s", maps[i]); memset(vis, 0, sizeof(vis)); dfs(0); printf("%d\n", ans); } return 0; }