POJ-1321.棋盘问题.(回溯)
做完题之后看了网上的一些题解但是发现他们的解释大部分都是错误的,所以就自己写了一下,笔者能力也有限,有错误之处大家多多指正。
第一次看题的时候以为就是简单的八皇后,但是写了之后发现存在很多问题,比如需要记录放入的棋子数,在一次访问之后没有回复原来棋盘的形状等一些问题。
本题思路:
回溯思想,对于每一行,从这一行的第一个开始放棋子,如果发现棋子可以放就放下一个棋子并且将已经放了棋子的数目更新,如果某一次放的棋子数目已经达到题目要求个数,则回溯到这一行的其它列并回复原来的状态继续放棋子,直到所有情况都放完为止,这里需要特别注意的是每次放棋子要改变对应列的状态和放的棋子个数,但是当回溯到这个对其它列进行操作的时候需要将这两个状态都更新为上一个状态即放这个棋子之前的状态,最后记得需要多后面的每行进行统计,因为棋子可能不是从第一行开始放的。
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = ;
int n, k, ans, count;
char maze[maxn][maxn];
bool isvisited[maxn];//表示某一列是否被访问 void dfs(int u) {
if(count == k) {
ans ++;
return;
}
if(u >= n) return;
for(int v = ; v < n; v ++) {
if(maze[u][v] == '#' && !isvisited[v]) {
count ++;//更新放了这个棋子之后的状态
isvisited[v] = true;
dfs(u + );
count --;//更新到放这个棋子之前的状态
isvisited[v] = false;
}
}
dfs(u + );//棋子的起始行可能不是第一行
} int main () {
while(~scanf("%d %d", &n, &k)) {
if(n == - && k == -) break;
memset(isvisited, false, sizeof(isvisited));
ans = count = ;
getchar();
for(int i = ; i < n; i ++) {
for(int j = ; j < n; j ++) {
maze[i][j] = getchar();
}
getchar();
}
dfs();
printf("%d\n", ans);
}
return ;
}
POJ-1321.棋盘问题.(回溯)的更多相关文章
- POJ 1321 棋盘问题(C)回溯
Emmm,我又来 POJ 了,这题感觉比上次做的简单点.类似皇后问题.但是稍微做了一点变形,比如棋子数量是不定的.棋盘形状不在是方形等等. 题目链接:POJ 1321 棋盘问题 解题思路 基本思路:从 ...
- POJ 1321 棋盘问题 --- DFS
POJ 1321 题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子. (注意 .不可放 #可放) 解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标 ...
- DFS POJ 1321 棋盘问题
题目传送门 /* DFS:因为一行或一列都只放一个,可以枚举从哪一行开始放,DFS放棋子,同一列只能有一个 */ #include <cstdio> #include <algori ...
- Poj 1321 棋盘问题 【回溯、类N皇后】
id=1321" target="_blank">棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
- (简单) POJ 1321 棋盘问题,回溯。
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- POJ 1321 棋盘问题【DFS/回溯/放与不放/类似n皇后】
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 62164 Accepted: 29754 Description 在一 ...
- POJ 1321 棋盘问题 (DFS + 回溯)
题目链接:http://poj.org/problem?id=1321 题意:中文题目,就不多说了...... 思路: 解题方法挺多,刚开始想的是先从N行中选择出来含有“#”的K行,再在这K行中放置K ...
- poj 1321 棋盘问题 (回溯法)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 69951 Accepted: 33143 Descriptio ...
- POJ——1321棋盘问题(DFS+回溯)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33272 Accepted: 16456 Description 在一 ...
- OpenJudge/Poj 1321 棋盘问题
1.链接地址: http://bailian.openjudge.cn/practice/1321 http://poj.org/problem?id=1321 2.题目: 棋盘问题 Time Lim ...
随机推荐
- python3.6.2(32位)的安装-1
简介:Python不需要编译成机器代码,是解释执行.解释器是机器指令,CPU执行解释器,解释器执行代码. 1.Python官网下载地址:https://www.python.org/,选择Downlo ...
- day03-数据类型
数据类型 一.介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 mysql常用数据类型概括:#1. 数字: 整型:tinyint.int.bi ...
- 09_组件三大属性(3)_refs和事件处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Masonry 动画
比如想做一个最简单的位移动画: 关键点在,改完约束后,调用下面这段代码,父view调用 layoutIfNeeded [UIView animateWithDuration:0.5 animation ...
- Java ssl认证记录
听到有人在用,所以自己随便搜了搜试了下,这里就是简单记录 就是操作了一遍这篇博文 https://blog.csdn.net/a495614205/article/details/12648939 i ...
- jvm问题
问题: 1. 一台服务器,部署多个服务,请问,这多个服务,对应的是一个jvm,还是多个jvm? 2. 一个线程,从controller 到 service,到DAO,会调用多个方法,请问是 对应一个 ...
- 强制停止ORACLE数据库
操作环境 SuSE+Oracle11gR2 适用场景 shutdown immediate停止数据库失败 操作命令 1.kill掉oracle实例相关进程 2.清除oracle占用的共享内存段 ipc ...
- jQuery 知识体系
jQuery基础知识一 jQuery之知识二-选择器 [jQuery知识]jQuery之知识三-过滤器 [jQuery知识]jQuery之知识四-DOM和CSS操作 [jQuery知识]jQuery之 ...
- LeetCode OJ 94. Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- 遍历DOM树,获取所有兄弟节点
获取兄弟节点的常用方法有: 方法 说明 siblings() 选取所有兄弟节点 next() 选取后面兄弟节点 nextAll() 选取所有后面的兄弟节点 nextUntil() 选取所有 ...