洛谷P1162 填涂颜色
题目链接: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 填涂颜色的更多相关文章
- 洛谷 P1162 填涂颜色 DFS
P1162 填涂颜色 https://www.luogu.com.cn/problem/P1162 qaq搜索好抽象啊,蒟蒻表示难以理解,搞半天才做出来一道题,很挫败www 思路 染色法.找墙壁外的连 ...
- 洛谷P1162—填涂颜色
这应该是是第一次记录洛谷题库里的题目吧: 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \ ...
- 洛谷 P1162 填涂颜色
题目链接:https://www.luogu.org/problemnew/show/P1162 题目描述由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要 ...
- 洛谷 P1162 填涂颜色【DFS】
题目链接:https://www.luogu.org/problemnew/show/P1162 题目描述 由数字 0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 ...
- 洛谷—— P1162 填涂颜色
https://www.luogu.org/problem/show?pid=1162 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭 ...
- 洛谷 P1162 填涂颜色题解
题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...
- 洛谷P1162 填涂颜色【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1162 题意: 有一个0和1组成的矩阵,一些1组成一个闭合圈,圈住一些0,现在要把被圈住的这些0变成2输出. ...
- 洛谷 - P1162 - 填涂颜色 - 简单搜索
https://www.luogu.org/problemnew/show/P1162 在外面加一圈0把0连起来,然后把所有0换成2,再从(0,0)把连通的2全部改回来. 这也是一个判断内外圈的好办法 ...
- luogu P1162 填涂颜色 x
P1162 填涂颜色 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和 ...
随机推荐
- 给类型为text的input设置value值却无法修改
给类型为text的input设置value值后就无法修改了 我的页面显示为如下但是退格却无法改变他的值 原来是缺少onChange事件,没法监听value的改变 所以需要添加 onChange={th ...
- vue安装及环境搭建
vue项目在pycharm里运行需要安装一个插件,打开settings,找到plugins,里面搜索vue.js,点击安装. vue安装 先安装node.js npm install -g @vue/ ...
- Oracle 用户相关
1.查询所有未修改过密码的Oracle用户 SELECT * FROM dba_users_with_defpwd d, dba_users du WHERE du.account_status = ...
- NetBeans切换其他界面风格
NetBeans是一款优秀的IDE,但是界面过亮,让我从使用以来就又爱又恨,经过一番摸索,测试出一款扩展软件 个人挺喜欢的分享出来 废话不多说下面教程: 1.安装NetBeans: 2.下载外观包ja ...
- 修改Oracle环境变量$PATH
此次在创建公司的Oracle 标准化应用时,提到了添加$PATH,但没有发现对我很符合我的现况的方法,现记录下此次添加$PATH的方法: 首先查看$PATH中是否已存在我们需要的路径: 执行指令ech ...
- 如何在Ubuntu server中修改IP
详细请移步至博客https://blog.csdn.net/shenzhen_zsw/article/details/74025066 方法一. sudo ifconfig eth0 100.100 ...
- [Hack] 搭建渗透测试实验环境
安装虚拟机镜像,镜像如下: Kali-Linux-2016.1-vm-amd64(https://www.kali.org/) Metasploitable2-Linux(https://source ...
- 【BZOJ2243】[SDOI2011] 染色(树链剖分)
点此看题面 大致题意: 有一棵\(n\)个节点的无根树和\(m\)个操作,且每个节点有一个颜色.操作有两种:一种是将两点树上路径之间所有点染成颜色\(c\),另一种是询问两点树上路径之间颜色段的数量. ...
- 【BZOJ1925】 [SDOI2010] 地精部落(带有一堆性质的动态规划)
点此看题面 大致题意: 问你有多少长度为\(n\)的数列,它当中每个数字要么比旁边两个数字都小,要么比旁边两个数字都大. 性质 这题应该比较显然是一道动态规划题,但刚看到这题时我却无从下手. 其实,了 ...
- java之接口相关知识
1.接口用interface来声明 //定义一个动物接口 public interface Animal{ public void eat(); public void travel(); } 2.接 ...