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的代码,清明作业一坨还没做啊...之前一直以为这题 ...
随机推荐
- 访问修饰符protected
protected(C# 参考) protected 关键字是一个成员访问修饰符. 受保护成员在其所在的类中可由派生类实例访问. 示例只有在通过派生类访问时,基类的受保护成员在派生类中才是可访问的. ...
- MyEclipse9中的不伤眼修改、FreeMarker插件、JQuery提示插件、全屏(FullScreen)插件的安装
============下载相关附件===================== http://files.cnblogs.com/fhtwins/eclipse-fullscreen_1.0.7.zi ...
- 如何写出小而清晰的函数?(JS 版)
本文以 JavaScript 为例,介绍了该如何优化函数,使函数清晰易读,且更加高效稳定. 软件的复杂度一直在持续增长.代码质量对于保证应用的可靠性.易扩展性非常重要. 然而,几乎每一个开发者,包括我 ...
- [DHTML]什么是DHTML?
DHTML 将 HTML.JavaScript.DOM 以及 CSS 组合在一起,用于创造动态性更强的网页. DHTML 总结 DHTML 只是一个术语,它描述了 HTML.JavaScript.DO ...
- Spark RDD简介与运行机制概述
RDD工作原理: 主要分为三部分:创建RDD对象,DAG调度器创建执行计划,Task调度器分配任务并调度Worker开始运行. SparkContext(RDD相关操作)→通过(提交作业)→(遍历RD ...
- DBA_Oracle冷备份和热备份的处理(概念)
2014-07-27 Created By BaoXinjian
- Oracle 数据库中不同事务并发访问的问题
现象 以SQL/Helper为例,打开不同的SQL窗口,对同一个表格进行操作,如下所示. 窗口1:当执行更新任务.紧接着执行查询时获得一组查询结果.结果是对的. 窗口2:而在另外一个SQL查询窗口中执 ...
- 【转】C++ 单例模式
http://blog.csdn.net/hackbuteer1/article/details/7460019 单例的一般实现比较简单,下面是代码和UML图.由于构造函数是私有的,因此无法通过构造函 ...
- Altiium Designer 09 解决局域网冲突的办法(转载)
Altiium Designer 09 解决局域网冲突的办法(转载) 一 通过防护墙禁止进程访问网络: 1.1打开DXP.EXE,然后在360的流量防护墙或WINDOWS防护墙禁止该进程访问网络.注意 ...
- 子iframe 怎么调用 父级的JS函数
window.parent.父级函数名();