棋盘问题 POJ - 1321 [kuangbin带你飞]专题一 简单搜索
Input
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
Sample Input
2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1
Sample Output
2
1 好久没更新题目了,没认真刷过题了,今天一个水题都写了这么久
类似八皇后的模板题、
贴一份开始自己想的代码,时间复杂度又长又水
定义了两个vis数组,想着只要开始让第一个数组补课访问就行,没有考虑清楚回溯,在回溯的时候因为你的cnt没变,一直增加,可能通过其他前面已经访问过的点增加cnt值,造成错误
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<cmath>
#define ls (u<<1)
#define rs (u<<1|1)
#define maxn 1010
#define ll long long
#define INF 1e9
using namespace std;
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
int n,k,vis1[][],vis2[][],step;
char mapn[][];
void dfs(int cnt){
if(cnt == k){
step ++;
return;
}
if(cnt == ){
memset(vis2,,sizeof(vis2));
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(mapn[i][j] == '#' && !vis1[i][j] && !vis2[i][j]){
vis2[i][j] = ;
dfs(cnt + );
}
}
}
}
int main(){
while(cin >> n >> k){
if(n == - && k == -){
break;
}
step = ;
memset(vis1,,sizeof(vis1));
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cin >> mapn[i][j];
}
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(mapn[i][j] == '#'){
vis1[i][j] = ;
dfs();
}
}
}
cout << step << endl;
}
return ;
}
注意这种写法,可以节省时间,直接以行dfs,然后一个循环竖行的值,找到一行中的值时又重新进入下一行
注意 同一行或同一列不能有其他棋子!!!连题目都没看清,果然水了很多
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<cmath>
#define ls (u<<1)
#define rs (u<<1|1)
#define maxn 1010
#define ll long long
#define INF 1e9
using namespace std;
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
int n,k,vis[],step,sum;
char mapn[][];
void dfs(int cnt){
if(sum == k){
step ++;
return;
}
if(cnt > n){
return;
}
for(int i=;i<=n;i++){
if(mapn[cnt][i] == '#' && !vis[i]){
vis[i] = ;
sum ++;
dfs(cnt + );
sum --;
vis[i] = ;
}
}
dfs(cnt + );
}
int main(){
while(cin >> n >> k){
if(n == - && k == -){
break;
}
step = ;
sum = ;
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cin >> mapn[i][j];
}
}
dfs();
cout << step << endl;
}
return ;
}
棋盘问题 POJ - 1321 [kuangbin带你飞]专题一 简单搜索的更多相关文章
- 迷宫问题 POJ - 3984 [kuangbin带你飞]专题一 简单搜索
定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...
- Catch That Cow POJ - 3278 [kuangbin带你飞]专题一 简单搜索
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. ...
- Dungeon Master POJ - 2251 [kuangbin带你飞]专题一 简单搜索
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...
- [kuangbin带你飞]专题一 简单搜索(回顾)
A - 棋盘问题 POJ - 1321 注意条件:不能每放一个棋子,就标记一行和一列,我们直接枚举每一行就可以了. AC代码: #include<iostream> #include< ...
- [kuangbin带你飞]专题一 简单搜索 x
A - 棋盘问题 POJ - 1321 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋 ...
- [kuangbin带你飞]专题一 简单搜索
ID Origin Title 454 / 1008 Problem A POJ 1321 棋盘问题 328 / 854 Problem B POJ 2251 Dungeon Ma ...
- [kuangbin带你飞]专题一 简单搜索 棋盘问题
题来:链接https://vjudge.net/problem/OpenJ_Bailian-132 J - 棋盘问题 1.题目: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别. ...
- [kuangbin带你飞]专题一 简单搜索 - A - 棋盘问题
#include<iostream> #include<cstdio> #include<string> #include<vector> #inclu ...
- [kuangbin带你飞]专题一 简单搜索 题解报告
又重头开始刷kuangbin,有些题用了和以前不一样的思路解决.全部题解如下 点击每道题的标题即可跳转至VJ题目页面. A-棋盘问题 棋子不能摆在相同行和相同列,所以我们可以依此枚举每一行,然后标记每 ...
随机推荐
- PHP后门***详解
说起php后门***我就心有愉季啊前不久一个站就因不小心给人注入了然后写入了小***这样结果大家知道的我就不说了下面我来给大家收集了各种php后门***做法大家可参考. php后门***对大家来说一点 ...
- windows server 2008 R2中建立ftp站点
在windows server 2008 R2中建立ftp站点,要遵循以下步骤: (1) 开启IIS中的ftp服务: (2) 在IIS中建立ftp站点. 具体过程如下: (1) 开启IIS中的ftp服 ...
- Java——win10配置环境变量
一.安装JDK 1.下载jdk 地址:https://pan.baidu.com/s/1P9CZZoZ0AzZU0c ...
- lvs+keepalived 高可用及负载均衡
一.环境准备 VIP:10.18.43.30 dr1:10.18.43.10 dr2:10.18.43.20 web1:10.18.43.13 web2:10.18.43.14 结构图 (一).预处理 ...
- Spark 系列(四)—— RDD常用算子详解
一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ...
- jdk1.8 HashMap底层数据结构:深入解析为什么jdk1.8 HashMap的容量一定要是2的n次幂
前言 1.本文根据jdk1.8源码来分析HashMap的容量取值问题: 2.本文有做 jdk1.8 HashMap.resize()扩容方法的源码解析:见下文“一.3.扩容:同样需要保证扩容后的容量是 ...
- linux安装启动mongodb
1:下载 http://www.mongodb.org/downloads 在85机器上上传压缩包后解压缩. 首先在linux中解压缩安装程序 通过命令操作: 解压 tar -zxvf mongodb ...
- js网页倒计时功能(天,时,分,秒)
给定任何一个时间,然后实现现在到那个时间的倒计时. 下面的例子是显示现在到2019年8月1号0时0分的倒计时: <div class="list"> <span ...
- 100天搞定机器学习|Day35 深度学习之神经网络的结构
100天搞定机器学习|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习 ...
- 帝国CMS(EmpireCMS) v7.5后台任意代码执行
帝国CMS(EmpireCMS) v7.5后台任意代码执行 一.漏洞描述 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行. 二 ...