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

这道题是LITTLESUN写的第一道BFS哦!

对于这道题的的思路是把封闭图形外边的0标记一边,在最后输出的时候把没有标记过的0输出为2,其他按照原图输出。

对于这道题的的边界有两种判断方式。第一种是在原图外面加一圈0

AC代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define MAXN 2000
using namespace std;
int G[MAXN][MAXN];
bool vis[MAXN][MAXN];
struct item
{
int x;
int y;
};
int n;
item a;
item t2;
void bfs()
{
queue<item>q;
a.x=;
a.y=;
q.push(a);
while(!q.empty())
{
item t=q.front();
q.pop();
if(G[t.x+][t.y]==&&t.x!=n+&&!vis[t.x+][t.y])
{
vis[t.x+][t.y]=;
t2.x=t.x+;
t2.y=t.y;
q.push(t2);
}
if(G[t.x-][t.y]==&&t.x!=&&!vis[t.x-][t.y])
{
vis[t.x-][t.y]=;
t2.x=t.x-;
t2.y=t.y;
q.push(t2);
}
if(G[t.x][t.y+]==&&t.y!=n+&&!vis[t.x][t.y+])
{
vis[t.x][t.y+]=;
t2.x=t.x;
t2.y=t.y+;
q.push(t2);
}
if(G[t.x][t.y-]==&&t.y!=&&!vis[t.x][t.y-])
{
vis[t.x][t.y-]=;
t2.x=t.x;
t2.y=t.y-;
q.push(t2);
}
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n+;i++)
{
for(int j=;j<=n+;j++)
{
scanf("%d",&G[i][j]);
}
}
bfs();
for(int i=;i<=n+;i++)
{
for(int j=;j<=n+;j++)
{
if(!vis[i][j]&&G[i][j]==)
{
G[i][j]=;
}
}
}
for(int i=;i<=n+;i++)
{
//cout<<endl;
for(int j=;j<=n+;j++)
{
printf("%d ",G[i][j]);
}
cout<<endl;
}
return ;
}

另一种方法是枚举边界每一个不是一的点作为起点进行BFS

但这个代码不知道哪里锅掉了,只有80分qwq

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define MAXN 2000
using namespace std;
int G[MAXN][MAXN];
bool vis[MAXN][MAXN];
struct item
{
int x;
int y;
};
int n;
item a;
queue<item> q;
void bfs(item b)
{
q.push(b);
while(!q.empty())
{
item t=q.front();
q.pop();
if(G[t.x+][t.y]==&&t.x!=n&&!vis[t.x+][t.y])
{
vis[t.x+][t.y]=;
t.x=t.x+;
t.y=t.y;
q.push(t);
}
if(G[t.x-][t.y]==&&t.x!=&&!vis[t.x-][t.y])
{
vis[t.x-][t.y]=;
t.x=t.x-;
t.y=t.y;
q.push(t);
}
if(G[t.x][t.y+]==&&t.y!=n&&!vis[t.x][t.y+])
{
vis[t.x][t.y+]=;
t.x=t.x;
t.y=t.y+;
q.push(t);
}
if(G[t.x][t.y-]==&&t.y!=&&!vis[t.x][t.y-])
{
vis[t.x][t.y-]=;
t.x=t.x;
t.y=t.y-;
q.push(t);
}
}
}
void work(){
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if((i==||i==n||j==||j==n)&&G[i][j]!=)
{
a.x=i;
a.y=j;
bfs(a);
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
scanf("%d",&G[i][j]);
}
}
work();
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(!vis[i][j]&&G[i][j]==)
{
G[i][j]=;
}
}
}
for(int i=;i<=n;i++)
{
//cout<<endl;
for(int j=;j<=n;j++)
{
printf("%d ",G[i][j]);
}
cout<<endl;
}
return ;
}

洛谷P1162 填涂颜色的更多相关文章

  1. 洛谷 P1162 填涂颜色 DFS

    P1162 填涂颜色 https://www.luogu.com.cn/problem/P1162 qaq搜索好抽象啊,蒟蒻表示难以理解,搞半天才做出来一道题,很挫败www 思路 染色法.找墙壁外的连 ...

  2. 洛谷P1162—填涂颜色

    这应该是是第一次记录洛谷题库里的题目吧: 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \ ...

  3. 洛谷 P1162 填涂颜色

    题目链接:https://www.luogu.org/problemnew/show/P1162 题目描述由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要 ...

  4. 洛谷 P1162 填涂颜色【DFS】

    题目链接:https://www.luogu.org/problemnew/show/P1162 题目描述 由数字 0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 ...

  5. 洛谷—— P1162 填涂颜色

    https://www.luogu.org/problem/show?pid=1162 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭 ...

  6. 洛谷 P1162 填涂颜色题解

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

  7. 洛谷P1162 填涂颜色【bfs】

    题目链接:https://www.luogu.org/problemnew/show/P1162 题意: 有一个0和1组成的矩阵,一些1组成一个闭合圈,圈住一些0,现在要把被圈住的这些0变成2输出. ...

  8. 洛谷 - P1162 - 填涂颜色 - 简单搜索

    https://www.luogu.org/problemnew/show/P1162 在外面加一圈0把0连起来,然后把所有0换成2,再从(0,0)把连通的2全部改回来. 这也是一个判断内外圈的好办法 ...

  9. luogu P1162 填涂颜色 x

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

随机推荐

  1. img IE下支持最大宽度

    border:0 none; max-width: 560px; height:auto; width:expression(this.width > 600 ? "600px&quo ...

  2. Yii2.0 高级版安装 windows

    最近在学习yii2.0 在安装高级版的时候遇到一些问题 索性解决了 下面分享一下 一.关于下载 自行百度,在Yii Framework 中文社区 下载专区下载高级应用程序模板(这边下载用电信网络不用下 ...

  3. ArcGIS中经纬度数据转空间数据

    已有这样一批数据,后缀为.txt 或者.csv .现需要将其转化为空间数据. 转换过程: 打开ArcMap选择file——>Add Data——>Add XY Data 设置经纬度对应的字 ...

  4. spring的struts简单介绍

    之前一段时间学习了springmvc+mybatis+spring框架,突然对之前的struts东西有点陌生, 所以这里简单记录下温故而知新的东西吧. 1.  首先建立一个Dynamic Web Pr ...

  5. 浏览器兼容圆角Border-radius的问题

    圆角css代码:border-radius只有在以下版本的浏览器:Firefox4.0+.Google Chrome 10.0+.Opera 10.5+.IE9+支持border-radius标准语法 ...

  6. 命令行启动mysql服务

    在<计算机网络>课程中曾学过net命令,可以用于启动后台服务.在mysql中,net命令用于启动后台服务器进程mysqld,即后台服务. 不过,如果在普通用户模式下net start my ...

  7. badboy页面脚本发生错误,解决方案

    1.参考网址:https://jingyan.baidu.com/article/e9fb46e17537797520f76645.html?from=qqbrowser061108 本人亲自测试,方 ...

  8. tomcat 启动显示指定的服务未安装

    解决方法: 命令行进入tomcat的bin目录 输入“service.bat install” 重启,OK

  9. spa 小程序的研发随笔 (1) --- 前言

    半年前跳槽, 新公司主要研发倾向于小程序的开发.由于之前并没有接触小程序,所以经过半年的实际开发,才敢来做一点笔记. 小程序提供很多组件给开发者使用,但是,实际使用中还是会有很多的问题. 小程序的组件 ...

  10. TFS看板晨会

    迭代任务看板 打开任务看板 打开燃尽图查看剩余工作情况,如果离发布较近,但是还有很多剩余工作,可能需要提前准备移除一部分优先级低的需求,如果剩余工作较少,适当安排一些需求 任务板按照人员分组,查看每个 ...