POJ1321 棋盘问题
来源:互联网 发布:知乎帐号异常 编辑:程序博客网 时间:2024/06/01 20:42
题目大意:
题目为中文,见http://poj.org/problem?id=1321
思路:
看到这个题,我最容易联想到八皇后问题。我认为本题与八皇后问题唯一不同的一点在于八皇后问题每一行必定会放一个棋子,而本题中有的行可能不需要放棋子。与八皇后思路相同,本题也采用深度优先搜索,对每一行进行深度优先搜索,要注意不放皇后的情况。
代码如下:
#include <iostream>using namespace std;#define MAXNUM 10int counter = 0;int res[MAXNUM]; //第i行放棋子在第res[i]列,不放置为-1char data[MAXNUM][MAXNUM];bool canplace(int row,int col);void DFS(int row,int num,int n,int k);int main(){ int n = 0; int k = 0; while(true) { counter = 0; //初始化 memset(data, 0, sizeof(data)); memset(res,100,sizeof(res)); for(int i = 0; i < MAXNUM; i++) { res[i] = -1; } cin>>n>>k; if(n == -1 && k == -1) { break; } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cin>>data[i][j]; } } DFS(0,0,n,k); //按行进行深搜 cout<<counter<<endl; } return 0;}void DFS(int row,int num,int n,int k){ //当前搜索第row行,共放了num个棋子 if(num == k) { counter++; return; } if(row >= n) { return; } else { for(int j = 0; j < n; j++) //对每一列进行判断 { if(canplace(row,j)) { res[row] = j; DFS(row + 1,num + 1,n,k); res[row] = -1; } } DFS(row + 1,num,n,k); //注意这一行不放棋子的情况 }}bool canplace(int row,int col){ //判断在row行,col列可不可以放棋子 int i = 0; bool flag = false; if(data[row][col] != '#') //当前行列不是棋盘,不能放 { flag = false; } else { for(i = 0; i < row; i++) { if(res[i] == col) //当前列已经放了棋子,不能再放 { flag = false; break; } } if(i == row) { flag = true; } } return flag;}
1 0
- poj1321棋盘问题
- poj1321 棋盘问题
- poj1321(dfs棋盘问题)
- poj1321 - 棋盘问题
- poj1321棋盘问题
- POJ1321--棋盘问题
- POJ1321( 棋盘问题)
- POJ1321:棋盘问题
- poj1321 棋盘问题
- poj1321棋盘问题
- poj1321棋盘问题{wa}
- poj1321 棋盘问题 dfs
- poj1321棋盘问题
- [POJ1321]棋盘问题
- POJ1321 棋盘问题
- poj1321 棋盘问题
- poj1321 棋盘问题(DFS)
- POJ1321----棋盘问题
- 蓝桥杯历届-奇怪的比赛
- 数据结构----单链表分析及实现
- HDU 1556 Color the ball(线段树)
- 值得推荐的C/C++框架和库
- [GDOI模拟2016.03.05]魔道研究
- POJ1321 棋盘问题
- python交叉编译过程记录
- VS编译错误:syntax error : missing ';' before 'type'
- 2016年目标
- Ubuntu14.04下,GO语言的安装!
- VMware 虚拟机硬盘镜像共享
- 001.unity碰撞检测、触发检测
- 1064 Complete Binary Search Tree
- JavaScript编写的几个训练逻辑思维能力的算法