POJ1321 棋盘游戏

跳转了解题意

分析:是八皇后问题的简化版,只用判断行列有无放置棋子,与八皇后问题的不同之处在于,某一列可以不放置棋子,棋子只能放置在有棋盘空格的地方。

因为某一列可以不放棋子,所以每次搜完这一列要到下一列,注意判断边界条件。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 
 6 using namespace std;
 7 
 8 char g[10][10];
 9 bool vis[10][10],line[10];
10 int n,k,ans,num;
11 
12 inline void dfs(int pos,int cnt)
13 {
14     if(pos>n) return;
15     for(int i=1;i<=n;i++)
16     {
17         if(g[pos][i]!='#') continue;
18         else if(line[i]) continue;
19         else if(!line[i])
20         {
21             line[i]=true;
22             if(cnt+1==k) ans++; 
23             else dfs(pos+1,cnt+1);
24             line[i]=false;
25         } 
26     }
27     dfs(pos+1,cnt);
28 }
29 
30 int main()
31 {
32     while(1)
33     {
34         scanf("%d%d",&n,&k);
35         if(n==-1&&k==-1) return 0;
36         for(int i=1;i<=n;i++)
37             for(int j=1;j<=n;j++)
38                 cin>>g[i][j];
39         memset(vis,false,sizeof(vis));
40         memset(line,false,sizeof(line));
41         ans=0;
42         dfs(1,0);
43         printf("%d
",ans);
44     }
45     return 0;
46 }
POJ1231 code
原文地址:https://www.cnblogs.com/Hoyoak/p/11365152.html