[codevs1049]棋盘染色<迭代深搜>
题目链接:http://codevs.cn/problem/1049/
昨天的测试题里没有打出那可爱的迭代深搜,所以今天就来练一练。
这道题其实我看着有点懵,拿着题我就这状态↓
然后我偷偷瞄了一眼hzwer的博客,啊♂,恍然大悟。。。。。。。
【思路】
根据迭代深搜的定义,我们这道题枚举要补上的黑格子数,最多是25格,所以循环ans从0到25就行,然后迭代,
只是在每一个坐标(x,y)的扩展中,下一次的扩展是当前这第x行剩下的和接下来的几行(避免重复操作)
然后就是在染色格子等于ans时check一下。。。。。
check就是搜寻一次全图,当第一次找到黑格子时就从这个黑格子开始把它能到达的格子全部变成白色,然后如果还能找到黑格子,说明黑格子没有全部连通
这是一个迭代深搜的入门题。。。不是很难,光看代码就可以理解了
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
#include<iostream>
#define maxn 6
using namespace std; const int dx[]={,,-,,},dy[]={,,,,-};
int map[][],ans,flag,ins[][];
char ch[]; void del(int x,int y)
{
for(int i=;i<=;i++)
{
int nx=x+dx[i],ny=y+dy[i];
if(nx<||nx>||ny<||ny>)continue;
if(ins[nx][ny]==)
{
ins[nx][ny]=;del(nx,ny);
}
}
} int check()
{
int tru=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
ins[i][j]=map[i][j];
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
if(ins[i][j]==)
{
if(tru==)return ;
else{
del(i,j);tru=;
}
}
}
return ;
} void dfs(int x,int y,int k)
{
if(k==ans){
if(check()){flag=;return;}
}
if(flag==||x>||y>)return;
for(int i=y;i<=;i++)
{
if(map[x][i]==){
map[x][i]=;
if(i==)dfs(x+,,k+);
else dfs(x,i+,k+);
map[x][i]=;
}
}
for(int i=x+;i<=;i++)
for(int j=;j<=;j++)
{
if(map[i][j]==){
map[i][j]=;
if(j==)dfs(i+,,k+);
else dfs(i,j+,k+);
map[i][j]=;
}
}
return;
} int main()
{
for(int i=;i<=;i++)
{
scanf("%s",ch+);
for(int j=;j<=;j++)
{
map[i][j]=ch[j]-'';
}
}
for(ans=;ans<=;ans++)
{
dfs(,,);
if(flag==)
{
printf("%d\n",ans);return ;
}
} }
[codevs1049]棋盘染色<迭代深搜>的更多相关文章
- bzoj 1085骑士精神 迭代深搜
题目传送门 题目大意:给出一幅棋盘,问能否复原,中文题面,不做解释. 思路:第一次写迭代深搜的题目,这道题还是挺经典的.这道题的状态很明显的每多搜一层就是多八倍,非常的多,而且又是t组输入,所以必定有 ...
- 小结:A* & IDA* & 迭代深搜
概要: 在dfs中,如果答案的深度很小但是却很宽,而且bfs还不一定好做的情况下,我们就综合bfs的优点,结合dfs的思想,进行有限制的dfs.在这里A*.IDA*和迭代深搜都是对dfs的优化,因此放 ...
- uva12558 Egyptian Fractions (HARD version)(迭代深搜)
Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ...
- [vijos1159&洛谷1494]岳麓山上打水<迭代深搜>
题目链接:https://vijos.org/p/1159 https://www.luogu.org/problem/show?pid=1494 这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板 ...
- [noip模拟]小猫爬山<迭代深搜>
[题目描述]: Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Freda和rai ...
- 【wikioi】1049 棋盘染色(迭代深搜)
http://www.wikioi.com/problem/1049/ 这题我之前写没想到迭代加深,看了题解,然后学习了这种搜索(之前我写的某题也用过,,但是不懂专业名词 囧.) 迭代加深搜索就是限制 ...
- 【BZOJ3041】水叮当的舞步 迭代深搜IDA*
[BZOJ3041]水叮当的舞步 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变.为了讨好她的偶像虹猫,水叮当决定在地毯上跳 ...
- poj1321 棋盘问题(深搜dfs)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1321">http://poj.org/prob ...
- POJ 1321 棋盘问题 (深搜)
题目链接 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆 ...
随机推荐
- redis01
1.redis 1)cookie与session session本质上也是cookie,cookie携带session返回给服务端 redis是一个存储数据库 redis读写快速,使用简单,常用于存储 ...
- 原生php导出csv文件
require('./db/dbManager.php'); require('./session.php'); require('./department_utils.php'); class Ex ...
- javascript中你可能遇到的隐式调用
前言 不知道用隐式调用来形容是否确切,其行为总是隐藏在背后,时不时出来露脸一下,作用貌似不大,但是了解一下还是有用处的,保不准在你的使用下大有作为.所谓的隐式调用简单来说就是自动调用一些方法,而这些方 ...
- python正则表达式之re模块方法介绍
python正则表达式之re模块其他方法 1:search(pattern,string,flags=0) 在一个字符串中查找匹配 2:findall(pattern,string,flags=0) ...
- 处理公共CDN突然失效的情况
公共CDN的使用 刚开始开发我的博客时,使用的bootcdn,发现他们被黑过,虽然想骂那些“黑客”,但是我们也没办法去防范,只能从自己的网站上入手解决. 那时我还没技术解决这个问题,网上搜过,大都只提 ...
- 使用AQS自定义重入锁
一.创建MyLock import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSyn ...
- 常见的几种JavaScript内存泄露
总结一下常见的几种JavaScript内存泄露: 1.意外的全局变量 全局变量属于window对象,所以只会随着window销毁才会销毁. 2.console.log() conaole.log()函 ...
- vs2017打包exe安装包
1,安装扩展程序Install Projects 2,在打开的界面搜索Install,找到Install Projects 3,在要打包的项目解决方案下创建一个生成exe的项目 4,在打包项目的文件系 ...
- 解决使用 el-table 中使用多选框 Checkbox 不刷新问题
问题 在 el-table 中使用 Checkbox 仅作为展示时,v-model 双向绑定就变得不那么适用了,这时候我们会使用 checked 属性来代替v-model. 问题来了当使用 filte ...
- javaScript 基础知识汇总 (十一)
1.柯里化和偏函数 偏函数 假如一个函数有两个参数,然后第一个参数我们调用的时候是确定的,那么我门就可以创建一个偏函数来简化参数传递的问题 示例 function mul(a,b){ return a ...