题目链接: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]棋盘染色<迭代深搜>的更多相关文章

  1. bzoj 1085骑士精神 迭代深搜

    题目传送门 题目大意:给出一幅棋盘,问能否复原,中文题面,不做解释. 思路:第一次写迭代深搜的题目,这道题还是挺经典的.这道题的状态很明显的每多搜一层就是多八倍,非常的多,而且又是t组输入,所以必定有 ...

  2. 小结:A* & IDA* & 迭代深搜

    概要: 在dfs中,如果答案的深度很小但是却很宽,而且bfs还不一定好做的情况下,我们就综合bfs的优点,结合dfs的思想,进行有限制的dfs.在这里A*.IDA*和迭代深搜都是对dfs的优化,因此放 ...

  3. uva12558 Egyptian Fractions (HARD version)(迭代深搜)

    Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ...

  4. [vijos1159&洛谷1494]岳麓山上打水<迭代深搜>

    题目链接:https://vijos.org/p/1159 https://www.luogu.org/problem/show?pid=1494 这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板 ...

  5. [noip模拟]小猫爬山<迭代深搜>

    [题目描述]: Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Freda和rai ...

  6. 【wikioi】1049 棋盘染色(迭代深搜)

    http://www.wikioi.com/problem/1049/ 这题我之前写没想到迭代加深,看了题解,然后学习了这种搜索(之前我写的某题也用过,,但是不懂专业名词 囧.) 迭代加深搜索就是限制 ...

  7. 【BZOJ3041】水叮当的舞步 迭代深搜IDA*

    [BZOJ3041]水叮当的舞步 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变.为了讨好她的偶像虹猫,水叮当决定在地毯上跳 ...

  8. poj1321 棋盘问题(深搜dfs)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1321">http://poj.org/prob ...

  9. POJ 1321 棋盘问题 (深搜)

    题目链接 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆 ...

随机推荐

  1. 大多数项目中会用到的webpack小技巧

    原文地址 本文是作者对自己所学的webpack技巧的总结,在没有指定特殊情况下适用于webpack 3.0版本. 进度汇报 使用webpack --progress --colors这样可以让编译的输 ...

  2. Vue的模板内换行问题

    在用vue的模板{{}}进行渲染文本时候,字符串换行不起作用,后使用ES6的模板字符串进行换行仍然不起作用,解决方法: <div>{{str}}</div> 可换为用v-htm ...

  3. 数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例)

    数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例) 简介 scikit-learn 估计器 加载数据集 进行fit训练 设置参数 预处理 流水线 结尾 数据挖掘入门系 ...

  4. 2020Ubuntu server1804最新安装后的配置

    一.Putty进行ssh连接. 完成最基本配置之后,就远程连接服务器了.在windows是我习惯putty 在我以前的老电脑里面找一个putty是0.6版本的,连上Ip ,还是原来的配方,还是原来的味 ...

  5. Oracle学习笔记--Oracle启动过程归纳整理

    Oracle 启动过程分为nomount状态mount状态open状态 每个状态下Oracle都会进行不同的操作:1.nomount状态 在$ORACLE_HOME/dbs目录下寻找参数文件 参数文件 ...

  6. LeetCode专题——详解搜索算法中的搜索策略和剪枝

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第20篇文章,今天讨论的是数字组合问题. 描述 给定一个int类型的候选集,和一个int类型的target,要求返 ...

  7. 简说Python之IO

    闺女,你在玩电脑什么游戏? 爸爸,我在玩植物大战僵尸呢. 闺女,你知道什么是输入输出设备吗? 爸爸,??? 你看,咱们的键盘和鼠标 ,就是可以控制那些植物的工具.这些发出指令的就是输入设备.咱们可以用 ...

  8. PageRank 算法初步了解

    前言 因为想做一下文本自动摘要,文本自动摘要是NLP的重要应用,搜了一下,有一种TextRank的算法,可以做文本自动摘要.其算法思想来源于Google的PageRank,所以先把PageRank给了 ...

  9. 今天对C语言不常用的小东西的了解

    今天又翻了C语言的书,看到const语句,一时间想不起来到底是干嘛的,看语句const   int   a=1;明白了这是一个支持常量指定类型的定义常量的关键字,作用几乎与#define一毛一样,但# ...

  10. (转)C++中的new

    转载自:http://blog.csdn.net/sparkliang/article/details/3650324 C++中的new其实是一个很糊弄人的术语,它有两种不同的含义,new运算符(ne ...