深度优先搜索----poj 1321棋盘问题
题目描述
棋盘问题
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 63237 | Accepted: 30234 |
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
解题思路:从问题出发,可以看出是一个搜索问题,棋盘是不规则的,而且棋子也不一定是排满的。需要对每一个位置进行可不可以下棋搜索,如果可以下,要考虑是否安排下棋。考虑到一行或者一列不能下两个棋子,对没行进行搜索,搜索到可以下的行需要考虑是否将棋子下入改行。最后考虑边界,停止搜索的边界有两个:一棋盘的边界n、二棋子下完的边界k。
#include<iostream>
using namespace std;
int way,result;//way表示已排多少棋子,result表示结果
int n,k;
int temp[10];//标记列是否已有棋子
char ch[10][10];
void dps(int l)//深度优先搜索函数
{if(way==k)//棋子排满边界{result++;return ;}if(l>=n)//设置数组边界{return ;}for(int i=0;i<n;i++)//考虑第l列的情况{if(ch[l][i]=='#'&&temp[i]==0){temp[i]=1;way++;dps(l+1);//将搜索的节点计算入内的情况temp[i]=0;//不将节点计算入内的情况way--;}}dps(l+1);//不考虑第l列的情况
}
int main()
{int i,j;while(cin>>n>>k&&(n!=-1||k!=-1)){//初始化way=0;result=0;for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>ch[i][j];//从第0行开始深度优先搜索dps(0);cout<<result<<endl;}return 0;
}
转载于:https://www.cnblogs.com/ke-yi-/p/10175851.html
深度优先搜索----poj 1321棋盘问题相关推荐
- POJ 1321 棋盘问题 搜索
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- POJ 1321 棋盘问题(回溯)
文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. 代码 2.1 Accepted 代码 1. 题目 1.1 题目链接 http://poj.org/problem?id ...
- POJ 1321 棋盘问题 题解
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70224 Accepted: 33254 Description 在一 ...
- poj 1321 棋盘问题(dfs)
题目:http://poj.org/problem?id=1321 没什么难度,比较水... View Code 1 #include <iostream> 2 #include<c ...
- POJ 1321 棋盘问题【DFS】
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35493 Accepted: 17485 Descriptio ...
- POJ - 1321 棋盘问题
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...
- POJ 1321 棋盘问题(DFS 状压DP)
用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...
- 1321:棋盘问题(深度优先搜索进阶)
题目链接:http://bailian.openjudge.cn/practice/1321?lang=en_US 题意: 求在一个n*n的矩阵内棋盘内摆放k个棋子的方案,这些棋子不在同一行不在同一列 ...
- A - 棋盘问题 POJ - 1321(dfs)
A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...
最新文章
- angular搭建项目步骤_建立健康的Angular项目应采取的步骤
- lua之弱引用table
- 并行数据库 分布式数据库
- 【译】在 Linux 上不安装 Mono 构建 .NET Framework 类库
- C - Rencontre Gym - 102798C
- [react] 说说你对声明式编程的理解?
- Photoshop cs6中kuler和mini bridge打开是空白的解决方法
- miniui 样式第一次加载不出来_matplotlib--修改样式
- 如何转换并压缩png格式图片
- xdebug+webgrind
- zul使用java_zk中zul页面中组件的id和java类中的变量绑定实现
- 怎么自己制作一个U盘
- J-LINK驱动下载
- iOS HealthKit
- 电路分析:运放和三极管组成的恒流源电路
- (人才测评)什么是创造力?如何提高创造力?
- cleanmymac x免费版安装包下载使用教程
- 06 暗语转换+ 人民币和卢布币值兑换+星座判断应用
- Android 客户端性能优化(魅族资深工程师毫无保留奉献)
- Swift MonkeyKing分享工具
热门文章
- Spring Cloud —— 链路追踪技术
- 内部类详解————局部内部类
- Altium Designer20原理图库放置引脚报错解决方案
- java二维数组排序先行后列,数组知识点归纳
- c语言 系统 dome,订餐系统(Dome)
- 8a 中断 传感器采集_加速度传感器的安装,你get了吗
- opencv对图像是软解码_C ++ OpenCV解码缓慢
- python语言基础实验_实验二Python语言基础函数包练习.doc
- java velocity 邮件_邮件集成java mail + 读取邮件模板
- ARMA模型的性质之MA模型