[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 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆 ...
随机推荐
- MySql5.7.28下载、安装、登陆详解
进入MySql官网下载,页面如下 根据自己需求,选择适合自己的进行下载 然后解压安装包到自己的喜欢的路径 配置环境变量 添加环境系统变量 MYSQL_HOME:D:\Program Files\mys ...
- 微信小程序学习 动手撸一个校园网小程序
动手撸一个校园网微信小程序 高考完毕,想必广大学子和家长们都在忙着查询各所高校的信息,刚好上手微信小程序,当练手也当为自己的学校做点宣传,便当即撸了一个校园网微信小程序. 效果预览 源码地址:Gith ...
- 【echarts3】 折线图我踩过的那些坑 (tooltip 设置,line 单个点/散点不显示问题)
echarts 折线图小技巧 echarts 折线图功能丰富且官方文档详细易懂,上手比较容易,这篇文章将分享一些项目中踩过的坑,示例主要以多条曲线为主,对大家完成一些 曲线.tooltip 和 mar ...
- removeAttribute getAttribute setAttribute
1.removeAttribute() 方法删除指定的属性. 注:removeAttributeNode() 方法从元素中删除指定的属性节点.简单的来讲,removeAttribute() 移除元素内 ...
- Slog64_项目上线之ArthurSlog个人网站上线3
ArthurSlog SLog-64 Year·1 Guangzhou·China September 9th 2018 ArthurSlog Page GitHub NPM Package Page ...
- css实战#用css画一个中国结
大家好!今天跟大家分享一个用 css 画中国结的教程.最终效果如下: 大家如果感兴趣可以参考我的源码:gitHub地址 首先,我们定义好画中国结需要的结构: <div class="k ...
- css 居中方法
垂直居中 利用“精灵元素”(ghost element)技术实现垂直居中,即在父容器内放一个100%高度的伪元素,让文本和伪元素垂直对齐,从而达到垂直居中的目的. .ghost-center { po ...
- 使用flask-dropzone 上传图片文件
引用 http://greyli.com/flask-dropzone/ 现在需要上传图片文件的页面使用jijin2渲染,由于是使用flask-dropzone的,所以我们使用dropzone的cs ...
- LeetCode#15 | Three Sum 三数之和
一.题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含 ...
- synchronized实现原理及其优化-(自旋锁,偏向锁,轻量锁,重量锁)
1.synchronized概述: synchronized修饰的方法或代码块相当于并发中的临界区,即在同一时刻jvm只允许一个线程进入执行.synchronized是通过锁机制实现同一时刻只允许一个 ...