题目链接: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. hibernate课程 初探单表映射2-6 session详解(下)

    本节主要内容: 1 介绍了getCurrentSession和opensession的区别 2 demo:通过打印比较两个session是否相同,验证两个session是否是同一session 3 d ...

  2. Json Web Token 简介

    1.Json Web Token是干什么        简称JWT,在HTTP通信过程中,进行身份认证.       我们知道HTTP通信是无状态的,因此客户端的请求到了服务端处理完之后是无法返回给原 ...

  3. eclipse 中安装spring tool suite 插件100%成功率

    自己曾在学习spring时,在eclipse EE中安装springsourceTool Suite插件浪费了很多时间,不管是离线,在线还是在eclipse marketplace中安装,尝试了许多方 ...

  4. ajax 的dataType

    这个问题已经碰到过好几次,经常自己挖坑,自己跳,而且还老是犯同样的错.一直纠结 明明其他地方得到的数据格式是对的.为什么这里就是不行.就是自己有洁癖去掉了  dataType:"json&q ...

  5. 【Oracle】曾经的Oracle学习笔记(8-15)ER图,三大范式,数据库字典,视图,索引,序列

    一.数据库建模 二.建表 三.数据库字典 四.DML语句 五.视图 六.索引 七.序列 八.DDL语句 Lesson 8 Overview of Data Modeling and Database ...

  6. Kyligence Analytics Platform Enterprise

    平台: arm 类型: ARM 模板 软件包: kap 2.3 kyanalyzer 2.3 apache kylin basic software bi big data cube data war ...

  7. pta 编程题21 公路村村通

    其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...

  8. php之cURL惯用

    1.php cURL的强大:PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器.使用各种协议.libcurl 目前支持的协议有 http.https.ft ...

  9. 远程链接mongoDB robomongo

    墙裂推荐一个软件robomongo 下载地址:https://robomongo.org/download 最初不用这个软件的时候需要shell链接mongoDB,折腾了半天结果版本不匹配 用robo ...

  10. UVA Live Archive 4015 Cave (树形dp,分组背包)

    和Heroes Of Might And Magic 相似,题目的询问是dp的一个副产物. 距离是不好表示成状态的,但是可以换一个角度想,如果知道了从一个点向子树走k个结点的最短距离, 那么就可以回答 ...