题目链接:https://www.luogu.org/problemnew/show/P1162


好久没写博客了,这次一写竟是道搜索模板题。可见我水平下降很快。。。

这道题虽然简单,但细节颇多,需要注意的东西不少。虽然是用搜索找连通块,但起点怎么找呢?其实找内部的点不如找外部的点,反正只是要把几个连通块区分开。本以为这样就可以对,实际实现时却忽略了两点,可能没有外部的点,即1占满了边界;可能不止3个连通块,外部点可能不连通。

 1 #include<cstdio>
 2 #include<queue>
 3 using namespace std;
 4 const int maxn=35;
 5 const int mov[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
 6 int n,mt[maxn][maxn];
 7 struct point {
 8     int x,y;
 9     point(int x,int y):x(x),y(y) {}
10 };
11 queue<point> q;
12 void bfs(int sx,int sy) {
13     q.push(point(sx,sy));
14     while(!q.empty()) {
15         int nx=q.front().x,ny=q.front().y;q.pop();
16         mt[nx][ny]=2;
17         for(int i=0;i<4;++i) {
18             int a=nx+mov[i][0],b=ny+mov[i][1];
19             if(mt[a][b]||a<1||a>n||b<1||b>n) continue;
20             q.push(point(a,b));
21         }
22     }
23 }
24 int main() {
25     scanf("%d",&n);
26     for(int i=1;i<=n;++i)
27         for(int j=1;j<=n;++j) scanf("%d",&mt[i][j]);
28     for(int i=1;i<=n;++i) {
29         if(!mt[1][i]) bfs(1,i);
30         if(!mt[i][1]) bfs(i,1);
31         if(!mt[n][i]) bfs(n,i);
32         if(!mt[i][n]) bfs(i,n);
33     }
34     for(int i=1;i<=n;++i) {
35         if(i!=1) putchar('\n');
36         for(int j=1;j<=n;++j) {
37             if(j!=1) putchar(' ');
38             if(!mt[i][j]) printf("2");
39             else if(mt[i][j]==1) printf("1");
40             else printf("0");
41         }
42     }
43     return 0;
44 }

AC代码

转载于:https://www.cnblogs.com/Mr94Kevin/p/9691914.html

【洛谷习题】填涂颜色相关推荐

  1. 洛谷P1162 填涂颜色(Python搜索)

    P1162 填涂颜色https://www.luogu.com.cn/problem/P1162 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方 ...

  2. 洛谷 P1162 填涂颜色

    填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...

  3. 洛谷p1162填涂颜色(dfs写法)

    这道题本是放在试炼场bfs里的,但是我觉得dfs好写些 所以就用dfs过了 题目如下 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合 ...

  4. 洛谷 P1162 填涂颜色题解

    题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...

  5. 洛谷 P1162 填涂颜色 C++ 深搜 染色法

    题目描述 由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6×6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...

  6. 洛谷P1162 填涂颜色

    题目链接:https://www.luogu.org/problemnew/show/P1162 这道题是LITTLESUN写的第一道BFS哦! 对于这道题的的思路是把封闭图形外边的0标记一边,在最后 ...

  7. 洛谷 P1162 填涂颜色-dfs染色法

    输入: 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 输出: 0 0 0 0 0 0 0 0 1 ...

  8. 洛谷 P1162填图颜色

    洛谷 P1162填图颜色 题目链接 #include <bits/stdc++.h> using namespace std; int xx[] = {0, -1, 0, 1}; int ...

  9. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  10. P1162 填涂颜色问题(广度优先搜索BFS)

    # 填涂颜色 ## 题目描述 由数字 $0$ 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 个方向.现要求把闭合圈内的所有空间都填写成 2.例如:6*6$的方阵(n ...

最新文章

  1. 谈谈 Java 中自定义注解及使用场景
  2. TF-IDF算法原理介绍
  3. JavaBean组件的基本使用-语法
  4. Docker 初级教程
  5. 河南工业大学计算机网络技术,河南工业大学2019年硕士研究生入学信息科学与工程学院计算机网络自命题考试大纲...
  6. php背景图片随页面大小改变,css背景图根据屏幕大小自动缩放
  7. 基于jQuery开发的javascript模板引擎-jTemplates
  8. 宅男、游戏、美女,一场不一样的技术公开课让你老泪纵横
  9. nginx location的命中过程
  10. 《C语言程序设计(第五版)谭浩强》学习笔记
  11. 速达服务器远程登录设置,ERP速达软件online远程客户端登录常见问题(三)
  12. 最新三网免挂码支付系统源码+免授权版
  13. GB BIG5 转码原理全解析
  14. raw os 之状态机编程
  15. python线程池,多线程
  16. The Development of Han Chinese’s Cuisine and Diet
  17. 广告学本科--现代管理学--[00107]
  18. 多传感器融合定位 第四章 点云地图构建及基于点云地图定位
  19. 疲惫!很疲惫(发发牢骚)
  20. 和快手大牛的技术面谈,附超全教程文档

热门文章

  1. php5.5 反序列化利用工具_Yii框架反序列化RCE利用链2
  2. php5.4.45的php.ini文件
  3. 计算机网络课程设计之电子邮件客户端程序设计与实现
  4. 操作系统学习之用C语言模拟CLOCK算法
  5. java递归解决百元百鸡_JS计算输出100元钱买100只鸡问题的解决方法
  6. Vue 项目调试总结
  7. Java笔记-编码方式创建kaptcha验证码
  8. C++笔记-ClassA a和ClassA a()的区别与联系
  9. Qt工作笔记-重写滚轮事件,实现界面的增加、减少(放大、缩小)
  10. Qt工作笔记-多线程时间服务应用