POJ 1321 棋盘问题

http://poj.org/problem?id=1321

因为 每一行 每一列不能有 棋子重复 也就是 没摆放一个棋子 就终结了 这一行 和这一列的 可能性 

和8皇后一样 

直接从第一行枚举 --> 深搜 回溯即可

复制代码
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define READ() freopen("in.txt", "r", stdin);
 5 using namespace std;
 6 
 7 int n, k, ans, tar = 0;
 8 char maze[16][16];
 9 bool row[16], culumn[16];
10 
11 void dfs(int x)
12 {
13     if (x == n) return;
14     int i = x;
15     for (int j = 0; j < n; j++)
16     {
17         if (maze[i][j] == '#' && culumn[j] == false && row[i] == false)
18         {
19             tar++;
20             if (tar == k)
21             {
22                 ans++;
23             }
24             else
25             {
26                 culumn[j] = true;
27                 row[i] = true;
28                 dfs(i+1);
29                 culumn[j] = false;
30                 row[i] = false;
31             }
32             tar--;
33         }
34     }
35     dfs(x+1);
36 }
37 
38 
39 int main()
40 {
41     while (~scanf("%d%d", &n, &k))
42     {
43         if (n == -1 && k == -1) break;
44         for (int i = 0; i < n; i++)
45         {
46             getchar();
47             for (int j = 0; j < n; j++)
48             {
49                 scanf("%c", &maze[i][j]);
50             }
51         }
52         memset(row, 0, sizeof(row));
53         memset(culumn, 0, sizeof(culumn));
54         tar = 0;
55         ans = 0;
56         dfs(0);
57         cout << ans << endl;
58     }
59     return 0;
60 }
复制代码

 

posted @ 2017-03-07 17:24  Lorazepam  阅读(140)  评论(0)    收藏  举报
编辑推荐:
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· 大数据高并发核心场景实战,数据持久化之冷热分离
· 运维排查 | SaltStack 远程命令执行中文乱码问题
· Java线程池详解:高效并发编程的核心利器
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
阅读排行:
· .NET 8 gRPC 实现高效100G大文件断点续传工具
· STM32学会要花费多长时间?一个从机械转行老程序员的血泪史
· LinqPad:C#代码测试学习一品神器
· .NET入行第4年(第二集)
· C#/.NET/.NET Core技术前沿周刊 | 第 43 期(2025年6.16-6.22)
点击右上角即可分享
微信分享提示