codevs 1049 棋盘染色
题目描述 Description
有一个5×5的棋盘,上面有一些格子被染成了黑色,其他的格子都是白色,你的任务的对棋盘一些格子进行染色,使得所有的黑色格子能连成一块,并且你染色的格子数目要最少。读入一个初始棋盘的状态,输出最少需要对多少个格子进行染色,才能使得所有的黑色格子都连成一块。(注:连接是指上下左右四个方向,如果两个黑色格子只共有一个点,那么不算连接)
输入包括一个5×5的01矩阵,中间无空格,1表示格子已经被染成黑色。
输出最少需要对多少个格子进行染色
11100
11000
10000
01111
11111
1
well…搜索…先bfs找到黑的再扩展进行染色。判断么…用dfs判断是否连通。
怀着高兴的心情提交上去。。。果然TLE了。。
呃呃好吧。我改一下判重。
原来是一个一个对比的,现在我把它转化成25位的二进制数,可以省去不少时间。
AC。。
#include <iostream>
#include <cstring>
using namespace std; typedef char zt[][];
zt m,q[],v;
int f,r,num[],dx[]={-,,,},dy[]={,,-,};
bool vis[];
int black[][],count=-;
int s; void dfs(zt ttpp,int xx,int yy)
{
if(xx<||xx>=||yy<||yy>=||v[xx][yy]||ttpp[xx][yy]=='')
return;
v[xx][yy]=;
for (int dd=;dd<;dd++)
dfs(ttpp,xx+dx[dd],yy+dy[dd]);
} int okay(zt tp)
{
int i;
memset(v,,sizeof(v));
for (i=;i<;i++)
if (tp[i/][i%]=='')
break;
dfs(tp,i/,i%);
for (int i=;i<;i++)
for (int j=;j<;j++)
if (tp[i][j]=='' && !v[i][j])
return ;
return ;
} int change_to_int(zt tt)
{
int rrr=,d=;
for (int i=;i>=;i--)
for (int j=;j>=;j--)
{
rrr+=(tt[i][j]-'')*d;
d*=;
}
return rrr;
} int bfs()
{
f=;r=;
for (int i=;i<;i++)
for (int j=;j<;j++)
q[][i][j]=m[i][j];
num[]=;
s=change_to_int(m);
vis[s]=;
while (f<r)
{
f++;
if (okay(q[f]))
return num[f];
count=-;
for (int i=;i<;i++)
for (int j=;j<;j++)
if (q[f][i][j]=='')
{
black[++count][]=i;
black[count][]=j;
}
for (int i=;i<=count;i++)
for (int j=;j<;j++)
{
int nx=black[i][]+dx[j];
int ny=black[i][]+dy[j];
if (nx<||nx>=||ny<||ny>=||q[f][nx][ny]=='')
continue;
r++;
for (int i=;i<;i++)
for (int j=;j<;j++)
{
q[r][i][j]=q[f][i][j];
}
q[r][nx][ny]='';
s=change_to_int(q[r]);
if (!vis[s])
{
vis[s]=;
num[r]=num[f]+;
}
else
r--;
}
}
return ;
} int main()
{
for (int i=;i<;i++)
for (int j=;j<;j++)
cin >> m[i][j];
cout << bfs() << "\n";
}
codevs 1049 棋盘染色的更多相关文章
- codevs——1049 棋盘染色
1049 棋盘染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有一个5×5的棋盘,上面有一 ...
- CODEVS——T 1049 棋盘染色
http://codevs.cn/problem/1049/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descr ...
- 【wikioi】1049 棋盘染色(迭代深搜)
http://www.wikioi.com/problem/1049/ 这题我之前写没想到迭代加深,看了题解,然后学习了这种搜索(之前我写的某题也用过,,但是不懂专业名词 囧.) 迭代加深搜索就是限制 ...
- [codevs1050]棋盘染色 2
[codevs1050]棋盘染色 2 试题描述 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. 输入 第一行一个整数N(<=100) ...
- [codevs1049]棋盘染色<迭代深搜>
题目链接:http://codevs.cn/problem/1049/ 昨天的测试题里没有打出那可爱的迭代深搜,所以今天就来练一练. 这道题其实我看着有点懵,拿着题我就这状态↓ 然后我偷偷瞄了一眼hz ...
- 1050 棋盘染色 2 - Wikioi
题目描述 Description 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. 输入描述 Input Description 第一行一个 ...
- CODEVS 2171 棋盘覆盖
2171 棋盘覆盖 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 错误日志: 直接在模板上调整 \(maxn\) 时没有在相应邻接表数 ...
- HDU 5402 Travelling Salesman Problem(棋盘染色 构造 多校啊)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5402 Problem Description Teacher Mai is in a maze wit ...
- [CodeVs1050]棋盘染色2(状态压缩DP)
题目大意:有一个5*N(≤100)的棋盘,棋盘中的一些格子已经被染成了黑色,求最少对多少格子染色,所有的黑色能连成一块. 这题卡了我1h,写了2.6k的代码,清明作业一坨还没做啊...之前一直以为这题 ...
随机推荐
- Redirect 原理
mvc .net 中,从服务器端跳转页面有很多方法 有些不会改变浏览器地址栏的地址,这个好理解,mvc本身的机制就是action的名字不一定是view的名字 我们请求的不是文件名,在action中我们 ...
- sentos nginx安装
nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译环 ...
- hadoop对于压缩文件的支持及算法优缺点
hadoop对于压缩文件的支持及算法优缺点 hadoop对于压缩格式的是透明识别,我们的MapReduce任务的执行是透明的,hadoop能够自动为我们 将压缩的文件解压,而不用我们去关心. 如果 ...
- 编写第一个java程序
安装了一个编辑器,Notepad++,这个编辑器以前在写PHP的时候就喜欢用,呵呵,现在写java也先沿用这个这个编辑器吧. 代码: public class Test{ public static ...
- iostat命令详解 IO性能分析
简介 iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间 ...
- XML中五个转义字符
字符:<,>,&,",© HTML对应的转移字符:< >&"© XML(只有5个)对应的转义字符: < >& " ...
- [ActionScript 3.0] AS3.0 对象在一定范围随机显示不重叠
import flash.geom.Rectangle; import flash.display.MovieClip; import flash.display.Sprite; var arr:Ar ...
- [Flex] ButtonBar系列——如何给ButtonBar添加一个ViewStack
<?xml version="1.0" encoding="utf-8"?> <!--如何给ButtonBar添加一个ViewStack--& ...
- [Java] java中方法可以重载
一个类中可以定义不止一个构造器,在使用new创建对象时,Java会根据构造器提供的参数来决定构建哪一个构造器,另外在Java中,Java会同时根据方法名和参数列表来决定所要调用的方法,这叫做方法重载( ...
- 光流算法:关于OpenCV读写middlebury网站给定的光流的代码
Middlebury是每个研究光流算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了光流算法的进展.Middlebury提供的标准库,其计算出的光流保存在后缀名为. ...