洛谷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=1;a.y=1;q.push(a);while(!q.empty()){item t=q.front();q.pop();if(G[t.x+1][t.y]==0&&t.x!=n+2&&!vis[t.x+1][t.y]){vis[t.x+1][t.y]=1;t2.x=t.x+1;t2.y=t.y;q.push(t2);}if(G[t.x-1][t.y]==0&&t.x!=1&&!vis[t.x-1][t.y]){vis[t.x-1][t.y]=1;t2.x=t.x-1;t2.y=t.y;q.push(t2);}if(G[t.x][t.y+1]==0&&t.y!=n+2&&!vis[t.x][t.y+1]){vis[t.x][t.y+1]=1;t2.x=t.x;t2.y=t.y+1;q.push(t2);} if(G[t.x][t.y-1]==0&&t.y!=1&&!vis[t.x][t.y-1]){vis[t.x][t.y-1]=1;t2.x=t.x;t2.y=t.y-1;q.push(t2);}}}int main() {scanf("%d",&n);for(int i=2;i<=n+1;i++){for(int j=2;j<=n+1;j++){scanf("%d",&G[i][j]);}}bfs();for(int i=2;i<=n+1;i++){for(int j=2;j<=n+1;j++){if(!vis[i][j]&&G[i][j]==0){G[i][j]=2;}}}for(int i=2;i<=n+1;i++){//cout<<endl;for(int j=2;j<=n+1;j++){printf("%d ",G[i][j]);}cout<<endl;}return 0; }
另一种方法是枚举边界每一个不是一的点作为起点进行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+1][t.y]==0&&t.x!=n&&!vis[t.x+1][t.y]){vis[t.x+1][t.y]=1;t.x=t.x+1;t.y=t.y;q.push(t);}if(G[t.x-1][t.y]==0&&t.x!=1&&!vis[t.x-1][t.y]){vis[t.x-1][t.y]=1;t.x=t.x-1;t.y=t.y;q.push(t);}if(G[t.x][t.y+1]==0&&t.y!=n&&!vis[t.x][t.y+1]){vis[t.x][t.y+1]=1;t.x=t.x;t.y=t.y+1;q.push(t);} if(G[t.x][t.y-1]==0&&t.y!=1&&!vis[t.x][t.y-1]){vis[t.x][t.y-1]=1;t.x=t.x;t.y=t.y-1;q.push(t);}} } void work(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if((i==1||i==n||j==1||j==n)&&G[i][j]!=1){a.x=i;a.y=j; bfs(a);}}} } int main() {scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&G[i][j]);}}work();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(!vis[i][j]&&G[i][j]==0){G[i][j]=2;}}}for(int i=1;i<=n;i++){//cout<<endl;for(int j=1;j<=n;j++){printf("%d ",G[i][j]);}cout<<endl;}return 0; }
转载于:https://www.cnblogs.com/LITTLESUNwl/p/10516634.html
洛谷P1162 填涂颜色相关推荐
- 洛谷P1162 填涂颜色(Python搜索)
P1162 填涂颜色https://www.luogu.com.cn/problem/P1162 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方 ...
- 洛谷 P1162 填涂颜色
填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...
- 洛谷p1162填涂颜色(dfs写法)
这道题本是放在试炼场bfs里的,但是我觉得dfs好写些 所以就用dfs过了 题目如下 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合 ...
- 洛谷 P1162 填涂颜色题解
题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...
- 洛谷 P1162 填涂颜色 C++ 深搜 染色法
题目描述 由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6×6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...
- 洛谷 P1162 填涂颜色-dfs染色法
输入: 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 输出: 0 0 0 0 0 0 0 0 1 ...
- 洛谷 P1162填图颜色
洛谷 P1162填图颜色 题目链接 #include <bits/stdc++.h> using namespace std; int xx[] = {0, -1, 0, 1}; int ...
- P1162 填涂颜色问题(广度优先搜索BFS)
# 填涂颜色 ## 题目描述 由数字 $0$ 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 个方向.现要求把闭合圈内的所有空间都填写成 2.例如:6*6$的方阵(n ...
- P1162 填涂颜色
填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...
最新文章
- B站崩了上热搜,A站跟着躺枪!微信、支付宝:跟我们比起来这是小问题
- 黑客常用的远程控制命令
- linux正则表达式的使用方法,Linux中基本正则表达式
- 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式...
- accessibility-service 高版本无法编译_今天我把APP的编译速度缩短了近5倍
- 斯坦福 CS228 概率图模型中文讲义 三、实际应用
- 06 iOS 关闭侧滑返回
- JavaScript 将死?
- 基础架构之GitLab
- linux整盘远程备份,linux实现自动远程备份(scp+ssh)
- Oracle从入门到精通
- 基于Javaweb实现进销存管理系统
- 基于Spring MVC + Spring + MyBatis的【网上购物系统】
- InSAR数据处理软件简介
- 笔记本双显卡,NVIDA驱动,Manjaro 双屏
- [生存志] 第48节 叔向忧羊舌
- Linux编程学习笔记-多进程编程
- (附源码)php二手服装网站 毕业设计 201711
- Java设计模式及实践
- 初窥门径——字典的更好使用方式