题目链接: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. 基于screen.width的伪响应式开发

    一.站在用户的角度看问题 一个用户,访问一个web页面的真实场景是怎样的呢? 下面是某用户访问某站点的一个场景: 1. 小明打开了自己的电脑,访问了鑫空间-鑫生活: 2. 小明体内洪荒之力无法控制,疯 ...

  2. 从github克隆内容到本地时权限问题

    从github克隆内容到本地时权限问题

  3. 使用FusionCharts创建可更新数据的JavaScript图表

    先创建一个简单的图表,然后改变它的数据(请参见下面的代码).图表最初据显示8月份的销售数据,当用户点击按钮时改为显示9月份的销售数据.每个月都有单独的XML文件,代码如下: <html> ...

  4. Jsoup进阶选择器

    package com.open1111.jsoup; import org.apache.http.HttpEntity;import org.apache.http.client.methods. ...

  5. EF和linq语句查询条件不等于某个参数出现的问题

    where t.a!=字符串   这是错误的写法,正确为 where t.a!=字符串.trim() 其他类型变量需要保持实体类型和查询条件参数的类型是一致的,不然出现的语句可能会是 类似`Exten ...

  6. Opentsdb简介

    1.OpenTSDB介绍 1.1.OpenTSDB是什么?主要用途是什么? 官方文档这样描述:OpenTSDB is a distributed, scalable Time Series Datab ...

  7. .net网站的下载地址

    .net4.0网址:http://www.crsky.com/soft/6959.htmlsql server r2: http://pan.baidu.com/share/link?shareid= ...

  8. 注册Windows service及其相关

    注册Windows service,.net写的 net stop "xxxxxx""%SYSTEMROOT%\Microsoft.NET\Framework\v2.0. ...

  9. 5.1 Object类型

    创建Object实例的方式有两种 ① 使用new操作符跟Object构造函数 var person = new Object(); person.name = "Tom"; pei ...

  10. 张量 (tensor) 是什么?

    对于大部分已经熟练的数学和物理工作者, 这实在是一个极为基础的问题. 但这个问题在我刚接触张量时也困扰了我很久. 张量的那么多定义, 究竟哪些是对的? (显然都是对的. ) 它们的关系是什么? 我尽可 ...