View Code
1 /* easy */
2 #include <iostream>
3 #include <cstring>
4 using namespace std;
5 int n,m,ans,flag,vis[40];
6 char f[40][40];
7 void solve(int k,int num)
8 {
9 if(num == m)
10 {
11 ans++;
12 return;
13 }
14 if(k>=n) return;
15 for(int i=0;i<n;i++)
16 {
17 if(f[k][i]=='#')
18 {
19 flag=0;
20 for(int j=0;j<k;j++)
21 {
22 if(vis[j]==i)
23 {
24 flag = 1;
25 break;
26 }
27 }
28 if(!flag)
29 {
30 vis[k]=i;
31 solve(k+1,num+1);
32 vis[k]=-1;
33 }
34 }
35 }
36 solve(k+1,num);
37 return;
38 }
39 int main()
40 {
41 //int n,m;
42 while(cin>>n>>m)
43 {
44 if(n==-1 && m==-1) break;
45 for(int i=0;i<n;i++)
46 cin>>f[i];
47 ans=0;
48 memset(vis,-1,sizeof(vis));
49 solve(0,0);
50 cout<<ans<<endl;
51 }
52 return 0;
53 }
 posted on 2011-05-08 19:09  eth0  阅读(116)  评论(0编辑  收藏  举报