棋盘问题
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 35493   Accepted: 17485

Description

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。

Input

输入含有多组测试数据。 
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 
当为-1 -1时表示输入结束。 
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 

Output

对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。

Sample Input

2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1

Sample Output

2
1

Source

蔡错@pku

就像n皇后问题,一开始想用两重循环做,发现还是一列一列的比较方便。

#include <cstdio>
#include <cstring>
int n, m, ans;
bool vis[10];
char map[10][10];
void dfs(int x, int y) {if (y == 0 || x == n) {if (!y) ans++;return ;}dfs(x+1, y);for (int i = 0; i < n; i++) {if (!vis[i] && map[x][i] == '#') {vis[i] = true; dfs(x + 1, y - 1);vis[i] = false;}}
}
int main() {while (scanf("%d%d", &n, &m) != EOF) {if (n == -1 && m == -1) break;for (int i = 0; i < n; i++) {scanf("%s", map[i]);}memset(vis, false, sizeof(vis));ans = 0; dfs(0, m);printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/cniwoq/p/6770889.html

POJ 1321 棋盘问题【DFS】相关推荐

  1. poj 1321 棋盘问题(dfs)

    题目:http://poj.org/problem?id=1321 没什么难度,比较水... View Code 1 #include <iostream> 2 #include<c ...

  2. POJ 1321 棋盘问题(DFS 状压DP)

    用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...

  3. POJ 1321 棋盘问题(回溯)

    文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. 代码 2.1 Accepted 代码 1. 题目 1.1 题目链接 http://poj.org/problem?id ...

  4. pku 1321 棋盘问题 DFS

    http://poj.org/problem?id=1321 自己真是本了开始写了歌对于棋子有顺序的搜索,导致求出来是ans的阶乘种数了,因为k < n且不能在同一行同一列,只要按行搜索,记录列 ...

  5. POJ 1321 棋盘问题 搜索

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  6. POJ 1321 棋盘问题 题解

    棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70224 Accepted: 33254 Description 在一 ...

  7. POJ - 1321 棋盘问题

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...

  8. 深度优先搜索----poj 1321棋盘问题

    题目描述 棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63237   Accepted: 30234 Descr ...

  9. A - 棋盘问题 POJ - 1321(dfs)

    A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...

最新文章

  1. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。...
  2. 阿里云地图添加点线面
  3. 判断非负整数是否是3的倍数_六年级小升初数学总复习专题(2-1)因数与倍数...
  4. Linux fork()函数底层CopyOnWrite写时复制实现原理剖析
  5. EhCache 分布式缓存/缓存集群
  6. How is JerryMaster.view.xml being loaded in WebIDE local test environment
  7. 用Java解决生产者-消费者问题
  8. html5代码自动生成,vs code中设置html5 快速生成模板
  9. 两相电机倒顺开关的接法是什么?
  10. 如何正确卸载天锐绿盾客户端
  11. 三分钟细数几款可视化前端开发工具
  12. r430服务器如何用u盘做系统,DELL R430服务器U盘安装操作系统指南.docx
  13. AUTOCAD——直线命令
  14. 从此刻起  文/毛毛虫
  15. 基于51单片机的蓝牙小车制作【新手向
  16. Java使用itextpdf实现为已有的pdf文件添加水印
  17. 细胞CLE19多肽荧光成像牛血清白蛋白荧光猝灭量子点的制备
  18. 如何解除硬盘的磁盘写保护?
  19. 雷锋网特约专访易科成志创始人、CEO潘真
  20. 《Effective C++》第三版 第六章 继承与面向对象设计 32~35条例

热门文章

  1. mysql入门之事务处理
  2. 最新CAX/EDA/CFD/GIS/光学/化工/液压软件资源网
  3. linux下vsftp
  4. LSTM CNN GRU DGA比较
  5. QTableView中使用Delegate方式来实现对特定列的文本进行换行
  6. NGUI_Texture
  7. 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区...
  8. 用工具进行CAD转换图片的过程
  9. Android与JS混编(js调用android相机扫描二维码)
  10. 10大常见的安全漏洞!你知道吗?