棋盘问题 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-棋盘问题 棋子不能摆在相同行和相同列,所以我们可以依此枚举每一行,然后标记每 ...
随机推荐
- WPF ContextMenu+VisualTreeHelper实现删除控件操作
<UserControl MouseRightButtonDown="UserControl_MouseRightButtonDown" > <UserC ...
- Go中的并发编程和goroutine
并发编程对于任何语言来说都不是一件简单的事情.Go在设计之初主打高并发,为使用者提供了goroutine,使用的方式虽然简单,但是用好却不是那么容易,我们一起来学习Go中的并发编程. 1. 并行和并发 ...
- python3学习-requests使用
前面我们讲过了urllib模块,知道他是用于网络请求的,这一节讲的requests还是用于网络请求的,只不过urllib是官方模块,而requests是第三方的模块.用过的人都说他才是'人类使用的', ...
- Bootstrap笔记--快速入门
首先是Bootstrap的简介: 业余了解:下面这个网址可以查询IP地址的地理位置 下面学习:(具体可以参考Bootstrap中文网) 栅格系统 Bootstrap 提供了一套响应式.移动设备优先的流 ...
- 记一次JPA遇到的奇葩错误——本地sql不识别表名的别名
记一次JPA遇到的奇葩错误——本地sql不识别表名的别名 报错:Unknown column 'our' in 'field list' 起因:需要本地sql查询后,分页返回自定义对象.报错信息如下: ...
- 大数据学习之旅2——从零开始搭hadoop完全分布式集群
前言 本文从零开始搭hadoop完全分布式集群,大概花费了一天的时间边搭边写博客,一步一步完成完成集群配置,所以相信大家按照本文一步一步来完全可以搭建成功.需要注意的是本文限于篇幅和时间的限制,也是为 ...
- mysql row size上限
mysql innodb 的 row size上限 背景 在项目使用中,出现了以下报错: Error Code: 1118 - Row size too large (> 8126). Chan ...
- 8.15 day33 进程池与线程池_协程_IO模型(了解)
进程池和线程池 开进程开线程都需要消耗资源,只不过两者比较的情况线程消耗的资源比较少 在计算机能够承受范围之内最大限度的利用计算机 什么是池? 在保证计算机硬件安全的情况下最大限度地利用计算机 ...
- 在一个jsp页面内实现简单计算器
首先创建一个calculate.jsp 这是用Javascript代码来验证,代码如下: <script type="text/javascript"> functio ...
- DC6-靶机渗透
靶场下载链接: Download: http://www.five86.com/downloads/DC-6.zip Download (Mirror): https://download.vulnh ...