其他分享
首页 > 其他分享> > POJ 1321 棋盘问题

POJ 1321 棋盘问题

作者:互联网

题目链接:http://poj.org/problem?id=1321

思路:对每一行开始检索,在此行放置棋子,标记其已经使用的列,回溯,此行不放置棋子也搜索一次。

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 char map[10][10];
 6 int vis[10];//标记每一列是否有棋子,有棋子为1,无棋子为0
 7 int n,k;
 8 int ans,count;
 9 void dfs(int i)
10 {
11     if(k == count)
12     {
13         ans ++;
14         return ;
15     }
16     if(i >= n) return ;
17 
18     for(int j = 0;j < n;j++)
19     {
20         if(!vis[j] && map[i][j] == '#')
21         {
22             vis[j] = 1;
23             count++;
24             dfs(i + 1);
25             //回溯
26             vis[j] = 0;
27             count--;
28         }
29     }
30     dfs(i + 1);//第i行不放棋子
31 }
32 int main()
33 {
34     while(cin >> n >> k)
35     {
36         if(n == -1 && k == -1) return 0;
37         getchar();
38         ans = 0,count = 0;
39         memset(vis,0,sizeof(vis));
40         for(int i = 0;i < n;i++)
41         {
42             cin >> map[i];
43         }
44         dfs(0);
45         cout << ans << endl;
46     }
47     return 0;
48 }

 

标签:count,10,1321,int,dfs,vis,棋子,POJ,棋盘
来源: https://www.cnblogs.com/Carered/p/10934303.html