题目描述

棋盘问题

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棋盘问题相关推荐

  1. POJ 1321 棋盘问题 搜索

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

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

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

  3. POJ 1321 棋盘问题 题解

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

  4. poj 1321 棋盘问题(dfs)

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

  5. POJ 1321 棋盘问题【DFS】

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

  6. POJ - 1321 棋盘问题

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

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

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

  8. 1321:棋盘问题(深度优先搜索进阶)

    题目链接:http://bailian.openjudge.cn/practice/1321?lang=en_US 题意: 求在一个n*n的矩阵内棋盘内摆放k个棋子的方案,这些棋子不在同一行不在同一列 ...

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

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

最新文章

  1. angular搭建项目步骤_建立健康的Angular项目应采取的步骤
  2. lua之弱引用table
  3. 并行数据库 分布式数据库
  4. 【译】在 Linux 上不安装 Mono 构建 .NET Framework 类库
  5. C - Rencontre Gym - 102798C
  6. [react] 说说你对声明式编程的理解?
  7. Photoshop cs6中kuler和mini bridge打开是空白的解决方法
  8. miniui 样式第一次加载不出来_matplotlib--修改样式
  9. 如何转换并压缩png格式图片
  10. xdebug+webgrind
  11. zul使用java_zk中zul页面中组件的id和java类中的变量绑定实现
  12. 怎么自己制作一个U盘
  13. J-LINK驱动下载
  14. iOS HealthKit
  15. 电路分析:运放和三极管组成的恒流源电路
  16. (人才测评)什么是创造力?如何提高创造力?
  17. cleanmymac x免费版安装包下载使用教程
  18. 06 暗语转换+ 人民币和卢布币值兑换+星座判断应用
  19. Android 客户端性能优化(魅族资深工程师毫无保留奉献)
  20. Swift MonkeyKing分享工具

热门文章

  1. Spring Cloud —— 链路追踪技术
  2. 内部类详解————局部内部类
  3. Altium Designer20原理图库放置引脚报错解决方案
  4. java二维数组排序先行后列,数组知识点归纳
  5. c语言 系统 dome,订餐系统(Dome)
  6. 8a 中断 传感器采集_加速度传感器的安装,你get了吗
  7. opencv对图像是软解码_C ++ OpenCV解码缓慢
  8. python语言基础实验_实验二Python语言基础函数包练习.doc
  9. java velocity 邮件_邮件集成java mail + 读取邮件模板
  10. ARMA模型的性质之MA模型