*chess
2020-02-17 12:18
393 查看
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 4000 (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 }
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 4000 (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 }
转载于:https://www.cnblogs.com/eth0/archive/2011/05/08/2040508.html
- 点赞
- 收藏
- 分享
- 文章举报