***很好的一道深搜的题目***
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<queue> #include<algorithm> using namespace std; #define N 10010 #define INF 0x3f3f3f3f char maps[100][100]; int n, k, ans; int vis[N]; void DFS(int m, int t) { if(t==k) { ans++; return ; } if(m==n) return ; for(int i=0; i<n; i++) { if(maps[m][i]=='#'&&!vis[i]) { vis[i]=1; DFS(m+1, t+1); vis[i]=0; } } DFS(m+1, t); } int main() { while(scanf("%d%d", &n, &k), n!=-1||k!=-1) { for(int i=0; i<n; i++) scanf("%s", maps[i]); ans=0; memset(vis, 0, sizeof(vis)); DFS(0, 0); printf("%d ", ans); } return 0; }