[Codevs] 1014 棋盘染色
1049 棋盘染色
有一个5×5的棋盘,上面有一些格子被染成了黑色,其他的格子都是白色,你的任务的对棋盘一些格子进行染色,使得所有的黑色格子能连成一块,并且你染色的格子数目要最少。读入一个初始棋盘的状态,输出最少需要对多少个格子进行染色,才能使得所有的黑色格子都连成一块。(注:连接是指上下左右四个方向,如果两个黑色格子只共有一个点,那么不算连接)
输入包括一个5×5的01矩阵,中间无空格,1表示格子已经被染成黑色。
输出最少需要对多少个格子进行染色
11100
11000
10000
01111
11111
1
分析 Analysis
思维级模版题= =。
判重:HASH蛤习
判断输出:DFS求联通块
主体:BFS
注意点:状态表示
主要还是数据范围小= =感谢出题人放我蒟蒻一马Orz
代码 Code
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<queue> 5 #define LL long long 6 using namespace std; 7 8 const int dir[4][2] = {{0,1},{1,0},{-1,0},{0,-1}}; 9 10 bool swi = true; 11 12 struct MAP{ 13 int map[7][7],step,remain; 14 15 MAP(){ 16 memset(map,0,sizeof(map)); 17 step = remain = 0; 18 } 19 }; 20 21 queue<MAP> q; 22 23 bool HASH[21473650]; 24 25 LL GETHASH(MAP now){ 26 LL code = 0; 27 for(int i = 1;i <= 5;i++){ 28 for(int j = 1;j <= 5;j++){ 29 code = (code<<1)+now.map[i][j]; 30 } 31 } 32 33 return code%21473648; 34 } 35 36 bool poicheck(int x,int y){ 37 if(x > 5 || x < 1 || y > 5 || y < 1) return false; 38 else return true; 39 } 40 41 int tot = 0; 42 bool chess[6][6]; 43 void dfs(int x,int y,MAP now){ 44 if(chess[x][y] || !now.map[x][y] || !poicheck(x,y)) return; 45 chess[x][y] = true; 46 tot++; 47 for(int i = 0;i < 4;i++){ 48 int nowx = x+dir[i][0]; 49 int nowy = y+dir[i][1]; 50 dfs(nowx,nowy,now); 51 } 52 } 53 54 bool check(MAP now){ 55 int x,y; 56 for(int i = 1;i <= 5;i++){ 57 for(int j = 1;j <= 5;j++){ 58 if(now.map[i][j]){ 59 x = i,y = j; 60 break; 61 } 62 } 63 } 64 65 memset(chess,false,sizeof(chess)); 66 tot = 0; 67 dfs(x,y,now); 68 69 if(tot == 25-now.remain) return true; 70 else return false; 71 } 72 73 void Input(){ 74 MAP tmp; 75 76 for(int i = 1;i <= 5;i++){ 77 for(int j = 1;j <= 5;j++){ 78 scanf("%1d",&tmp.map[i][j]); 79 if(!tmp.map[i][j]) tmp.remain++; 80 } 81 } 82 83 tmp.step = 0; 84 85 86 87 q.push(tmp); 88 } 89 90 void PUSH(MAP now){ 91 now.step++;now.remain--; 92 for(int i = 1;i <= 5;i++){ 93 for(int j = 1;j <= 5;j++){ 94 if(!now.map[i][j]){ 95 now.map[i][j] = 1; 96 97 LL code = GETHASH(now); 98 99 if(HASH[code]){ 100 now.map[i][j] = 0; 101 continue; 102 }else HASH[code] = 1; 103 104 if(check(now)){ 105 printf("%d",now.step); 106 swi = false; 107 return; 108 } 109 q.push(now); 110 now.map[i][j] = 0; 111 } 112 } 113 } 114 } 115 116 void bfs(){ 117 while(!q.empty() && swi){ 118 MAP tmp = q.front(); 119 q.pop(); 120 // cout << 'A'; 121 if(check(tmp)){ 122 printf("%d",tmp.step); 123 swi = false; 124 return; 125 } 126 127 PUSH(tmp); 128 } 129 } 130 131 int main(){ 132 133 Input(); 134 bfs(); 135 136 return 0; 137 }
A tired day = =
转载于:https://www.cnblogs.com/Chorolop/p/7327877.html
[Codevs] 1014 棋盘染色相关推荐
- Codevs 1049 棋盘染色
1049 棋盘染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有一个5×5的棋盘,上面有一些格子被染成了黑色,其他 ...
- [CODEVS 1050] 棋盘染色 2
描述 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. http://codevs.cn/problem/1050/ 分析 CODEVS 题 ...
- CODEVS——T 1049 棋盘染色
http://codevs.cn/problem/1049/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descripti ...
- 【Codeforces】1080C Masha and two friends (棋盘染色)
http://codeforces.com/problemset/problem/1080/C 给定一个棋盘,(1,1)的位置是白色,观察可以知道,如果横纵坐标之和是偶数,那么是白色,奇数的话就是黑色 ...
- 1050 棋盘染色 2 - Wikioi
题目描述 Description 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. 输入描述 Input Description 第一行一个 ...
- Codevs 1191 数轴染色
1191 数轴染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色. ...
- 搜索一轮练zi习nve计划(CODEVS)
虫食算 传染病控制 棋盘染色 水叮当的舞步 四子连棋 解药?毒药? 太鼓达人 单词接龙 四色问题 以及黄金天梯和CODEVS搜索第一页-..的大部分题-能做一点是一点吧. 听说打好搜索-NOIp问题不 ...
- Conclusion
/* 高中最后一个暑假 挺有意义的 考了一暑假的试 最后总结一下吧 一天一天来吧7.30 这一天的题有点变态啊 不过难题有难题的做法 T1斗地主 考试的时候打了0分 0分..... 原因好像是读入的格 ...
- 网络流 24 题汇总(LOJ 上只有 22 题???)
太裸的我就不放代码了...(黑体字序号的题表示值得注意) 1.搭配飞行员 [LOJ#6000] 二分图最大匹配. 2.太空飞行计划 [LOJ#6001] 最小割常规套路.输出方案.(注:这题换行符要用 ...
最新文章
- 排球比赛计分规则功能说明书
- C语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数
- layui横向时间线_炒股一生只买一种股票:股价K线形成这样后,必然有一波拉升...
- SQL 连接字符串的说明(转)
- Server 2008 R2 AD RMS完整部署:AD部署篇
- Java缓存框架使用EhCache结合Spring AOP
- STM32之外部中断例程
- 微软自带的防反编译工具dotfuscator.exe的使用
- 算法-斐波那契数列:兔子序列
- PHP程序员面临的成长瓶颈
- 爬取国家统计局数据正式篇
- EPS FB信令流程
- 车机芯片:今后买车就像从前配电脑
- 工作感想——离开公司
- 电厂计算机房消防,3 燃煤电厂建(构)筑物的火灾危险性分类、耐火等级及防火分区...
- ViewPager.setOffscreenPageLimit
- autojs海贼王之家免root脚本
- vue 海康视频播放
- 月薪5w的大佬都爱用的SWOT分析法,本文分析透了!
- 菜鸟说有线网络连接故障
热门文章
- 程序员开发windows linux,好程序员不用windows作开发环境
- php处理base64数据,php基于base64解码数据与图片的转换
- 通俗理解Java中的Lambda表达式
- 数据结构之树:树的介绍——9
- Vue移动端项目——搜索联想建议功能的实现(结合watch属性和使用lodash防抖节流)
- Web框架——Flask系列之综合案例——图书管理系统(十)
- LeetCode 1733. 需要教语言的最少人数(哈希+枚举)
- 天池 在线编程 分割数组
- LeetCode 1464. 数组中两元素的最大乘积
- 数据结构--栈--共享顺序栈