POJ 1321 棋盘问题【DFS】
棋盘问题
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】相关推荐
- poj 1321 棋盘问题(dfs)
题目:http://poj.org/problem?id=1321 没什么难度,比较水... View Code 1 #include <iostream> 2 #include<c ...
- POJ 1321 棋盘问题(DFS 状压DP)
用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...
- POJ 1321 棋盘问题(回溯)
文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. 代码 2.1 Accepted 代码 1. 题目 1.1 题目链接 http://poj.org/problem?id ...
- pku 1321 棋盘问题 DFS
http://poj.org/problem?id=1321 自己真是本了开始写了歌对于棋子有顺序的搜索,导致求出来是ans的阶乘种数了,因为k < n且不能在同一行同一列,只要按行搜索,记录列 ...
- POJ 1321 棋盘问题 搜索
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- POJ 1321 棋盘问题 题解
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70224 Accepted: 33254 Description 在一 ...
- POJ - 1321 棋盘问题
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...
- 深度优先搜索----poj 1321棋盘问题
题目描述 棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63237 Accepted: 30234 Descr ...
- A - 棋盘问题 POJ - 1321(dfs)
A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...
最新文章
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。...
- 阿里云地图添加点线面
- 判断非负整数是否是3的倍数_六年级小升初数学总复习专题(2-1)因数与倍数...
- Linux fork()函数底层CopyOnWrite写时复制实现原理剖析
- EhCache 分布式缓存/缓存集群
- How is JerryMaster.view.xml being loaded in WebIDE local test environment
- 用Java解决生产者-消费者问题
- html5代码自动生成,vs code中设置html5 快速生成模板
- 两相电机倒顺开关的接法是什么?
- 如何正确卸载天锐绿盾客户端
- 三分钟细数几款可视化前端开发工具
- r430服务器如何用u盘做系统,DELL R430服务器U盘安装操作系统指南.docx
- AUTOCAD——直线命令
- 从此刻起 文/毛毛虫
- 基于51单片机的蓝牙小车制作【新手向
- Java使用itextpdf实现为已有的pdf文件添加水印
- 细胞CLE19多肽荧光成像牛血清白蛋白荧光猝灭量子点的制备
- 如何解除硬盘的磁盘写保护?
- 雷锋网特约专访易科成志创始人、CEO潘真
- 《Effective C++》第三版 第六章 继承与面向对象设计 32~35条例