广度优先搜索——填涂颜色
来源:互联网 发布:知乎 宋慈 编辑:程序博客网 时间:2024/05/01 06:42
前排提示
壮哉我大C党
洛谷 P1162 填涂颜色
题目描述
由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下:
0 0 0 0 0 0| 0 0 0 0 0 0
0 0 1 1 1 1| 0 0 1 1 1 1
0 1 1 0 0 1| 0 1 1 2 2 1
1 1 0 0 0 1| 1 1 2 2 2 1
1 0 0 0 0 1| 1 2 2 2 2 1
1 1 1 1 1 1| 1 1 1 1 1 1
因为看着不方便所以在中间加了横线以便区分
分析
和曾经的OIBH总部相当相像,不过还要将被围住的地方涂上“2”而已
加一个数组即可(标记所有走过的地方),最后依照该数组输出(什么?0和1怎么办?原数组即可解决(即若B[i]<>0就照原数组输出,反之就会了吧?))
#include<iostream>using namespace std;int a[30][30];int b[30][30];int s[900][2];int dx[5];int dy[5];int n;void init(){ int i,j; cin>>n; for (i=1;i<=n;i++) for (j=1;j<=n;j++) { cin>>a[i][j]; b[i][j]=a[i][j]; } dx[1]=1;dx[2]=-1;dx[3]=0;dx[4]=0; dy[3]=1;dy[4]=-1;dy[1]=0;dy[2]=0; return;}void bfs(int x,int y){ int t,h,i; t=1;h=0;b[x][y]=1;s[1][1]=x;s[1][2]=y; do { h++; for (i=1;i<=4;i++) if (s[h][1]+dx[i]>=1&&s[h][1]+dx[i]<=n&&s[h][2]+dy[i]>=1&&s[h][2]+dy[i]<=n) if (b[s[h][1]+dx[i]][s[h][2]+dy[i]]==0) { t++; s[t][1]=s[h][1]+dx[i]; s[t][2]=s[h][2]+dy[i]; b[s[t][1]][s[t][2]]=1; } } while (h<t); return;}void doit(){ int i,j; for (i=1;i<=n;i++) { if (b[i][1]!=1) bfs(i,1); if (b[i][n]!=1) bfs(i,n); if (b[1][i]!=1) bfs(1,i); if (b[n][i]!=1) bfs(n,i); } for (i=1;i<=n;i++) { for (j=1;j<=n;j++) if (b[i][j]==0) cout<<2<<" "; else cout<<a[i][j]<<" "; cout<<endl; } return;}int main(){ init(); doit(); return(0);}
1 0
- 广度优先搜索——填涂颜色
- 洛谷 1162——填涂颜色(广度优先搜索)
- 洛谷Oj-P1162 填涂颜色-广度优先搜索
- (洛谷)【P1162】填涂颜色 [广度搜索]
- 搜索——广度优先搜索
- 广度优先搜索——字符串替换
- 迷宫——广度优先搜索
- BFS广度优先搜索——入门
- 广度优先搜索——01迷宫
- 广度优先搜索——BFS遍历
- 图——广度优先搜索(Graph
- 广度优先搜索算法—BFS
- 图搜索——深度优先与广度优先
- 广度优先、深度优先搜索算法——LeetCode
- 【搜索】[luoguP1162]填涂颜色
- 广度优先搜索BFS——图邻接表表示
- 广度优先搜索BFS——图邻接矩阵表示
- 图的遍历——广度优先搜索
- USACO5.1凸包参考代码
- tcpdump抓包
- HTML5——框架
- QT做的推箱子游戏
- Hibernate同名不同包下的映射文件同时加载问题
- 广度优先搜索——填涂颜色
- lnmp nginx 开启pathinfo
- VR系列——Oculus Audio sdk文档:九、发布说明——Audio SDK 0.11/0.10发布说明
- JDBC中Connection解惑
- 容器
- MATLAB元胞数组
- CVPR 2017-01-17
- linux下vi命令大全
- Java通信-仿QQ聊天项目