洛谷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),涂色前和 ...
随机推荐
- 常见SQL优化方法
SQL优化的一些方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 ...
- Storm里面fieldsGrouping和Field的概念详解
这个Field通常和fieldsGrouping分组机制一起使用,这个Field特别难理解,我自己也是在网上看了好多文章,感觉依旧讲的不是很清楚,是似而非,没有抓到重点.这个问题足足困扰了我3-4天时 ...
- grunt + sass 使用记录
环境依赖 Nodejs for grunt Ruby for sass 配置文件 package.json { "name": "app", "ver ...
- jqGrid中multiselect: true 操作checkbox
在jqGrid中设置multiselect: true可以实现全选的操作,但怎么设置被选中的checkbox里面的值呢,做法如下:jQuery("#listTable").jqGr ...
- Payoneer个人账户注册申请教程
1)照牛排于2013年末写的<免费申请Payoneer万事达预付卡+美国银行账号教程>非常详尽,网友纷纷转载,但生命在于折腾,Payoneer官网几经改版,自2015年3月推出无卡账户以来 ...
- linux下获取外网IP
使用阿里云或者有多个网卡IP的机器需要取外网IP时,可以用下面这种 wget -qO - ifconfig.co 更多方法参考:https://yq.aliyun.com/ziliao/105999
- Python核心编程——多线程threading和队列
线程与进程类似不过他们是在同一个进程下执行的,并共享相同的上下文.可以将他们认为是在一个主进程或“主线程”中运行的迷你进程. 线程包括开始.执行顺序和结束三部分.它有一个指令指针,用于记录当前运行的上 ...
- 索引属性 unique指定
比较重要的属性有: 名字 db.collection.ensureIndex({},{name:''}) 在创建索引时,mongodb会自己给索引创建默认的名字,这种名字并不好记,我们看一下mongo ...
- 前端三大框架 Vue.js、AngularJS、React 的区别
Vue.js Vue.js 是一种构建数据驱动的Web界面的渐进式框架,Vue.js 采用自底向上增量开发的设计. Vue.js 轻量高效,数据双向绑定(响应式数据绑定), 它会自动响应数据的变化情况 ...
- python_51_函数返回值1
def test1(): '只执行return以前的' print('test1返回值为0 ') return 0 print('这句不会被执行的') x=test1() print(x)#值为0 d ...