博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1321 棋盘问题 题解
阅读量:5991 次
发布时间:2019-06-20

本文共 2005 字,大约阅读时间需要 6 分钟。

棋盘问题

Time Limit: 1000MS  Memory Limit: 10000K

Total Submissions: 70224  Accepted: 33254

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

21

Source

蔡错@pku
------------------------------------------------------------------------------------------------------------------------------------------------------
本题为一道典型的深搜的模板题
但刚开始见到的时候往往会找不到地方下手
博主的思路就是按照行进行深搜
然后标记给列
这样就能保证不重复地遍历所有元素
当然只有map上面是#的才能放咯
下面上我注释仔细
谁都看的懂的代码
------------------------------------------------------------------------------------------------------------------------------------------------------
1 //Author:LanceYu 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 #include
22 #include
23 #include
24 #define ll long long25 using namespace std;26 const double clf=1e-8;27 //const double e=2.718281828;28 const double PI=3.141592653589793;29 const int MMAX=2147483647;30 //priority_queue
p;31 //priority_queue
,greater
>pq;32 char map[9][9];33 int vis[9];34 int n,m,sum,num;35 void dfs(int x)//按照行数搜索 36 {37 if(m==num)//如果做到了放入n个棋子,方案总数+138 {39 sum++;40 return;41 }42 if(x>n-1)//不能越界 43 return;44 for(int j=0;j

------------------------------------------------------------------------------------------------------------------------------------------------------

Notes:主要是了解DFS算法的本质

略微修改下模板即可AC

2018-11-20  01:46:50  Author:LanceYu

转载于:https://www.cnblogs.com/lanceyu/p/9986835.html

你可能感兴趣的文章
用jsp写出记忆曲线的表格(用学习新概念英语做例子)
查看>>
目录检索
查看>>
Hadoop集群部署模型纵览3
查看>>
USB枚举过程图示
查看>>
CASE WHEN THEN 小结
查看>>
QEMU 1.3 发布,模拟处理器
查看>>
Flex: 数据绑定将无法检测对“***”的指定
查看>>
【C++学习】显式构造函数
查看>>
gpFinder 2.0 发布
查看>>
分享:再谈字符串编码与HTTP协议
查看>>
Lambda 表达式(C# 编程指南)
查看>>
分享:EJDB 1.0.37 发布,嵌入式 JSON 数据库引擎
查看>>
[Z]Marching Cubes的实现
查看>>
学习之路二十一:设置DataGridView中的按钮为Disable
查看>>
【转】各种类之间的关系
查看>>
【SAS NOTE】sas 9.2 安装
查看>>
The connection to adb is down, and a severe error has occured.问题解决
查看>>
Servlet 单例多线程
查看>>
Java-对象多态性
查看>>
Android点击Button实现功能的几种方法
查看>>