洛谷OJ P1162填涂颜色
来源:互联网 发布:妄想代理人知乎 编辑:程序博客网 时间:2024/05/01 14:09
题目描述:
由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2。
例子:
填写前:
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 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1
分析:
这道题目找到思路就很简单,从周围四边出发找所有不在圈里面的点,打标记。O(n^2)
#include <stdio.h>#include <string.h>#include <stdlib.h>const int dx[]={0,0,1,-1};const int dy[]={1,-1,0,0};struct add{ int x,y;}; int flg[32][32],map[32][32],n; add queue[304];int inmp(const int &x,const int &y){ return ((x>0)&&(x<=n)&&(y>0)&&(y<=n));}void bfs(const int &x,const int &y){ int head=0,tail=1,xx,yy; flg[x][y]=0; queue[1].x=x; queue[1].y=y; while(head<=tail) { ++head; for(int i=0;i<4;++i) { xx=queue[head].x+dx[i]; yy=queue[head].y+dy[i]; if(inmp(xx,yy)) if(flg[xx][yy] && map[xx][yy]==0) { queue[++tail].x=xx; queue[tail].y=yy; flg[xx][yy]=0; } } }}int main(){ int i,j; scanf("%d",&n); for(i=1;i<=n;++i) for(j=1;j<=n;++j) { scanf("%d",&map[i][j]); flg[i][j]=1; } for(i=1;i<=n;++i) { if(map[1][i]==0 && flg[1][i]) bfs(1,i); if(map[n][i]==0 && flg[n][i]) bfs(n,i); if(map[i][1]==0 && flg[i][1]) bfs(i,1); if(map[i][n]==0 && flg[i][n]) bfs(i,n); } for(i=1;i<=n;putchar('\n'),++i) for(j=1;j<=n;++j) if(map[i][j]) printf("1 "); else if(flg[i][j]) printf("2 "); else printf("0 "); return 0;}
0 0
- 洛谷OJ P1162填涂颜色
- 洛谷P1162 填涂颜色
- 洛谷 P1162 填涂颜色
- 洛谷P1162 填涂颜色
- 洛谷 P1162 填涂颜色
- 洛谷 P1162 填涂颜色
- 洛谷p1162 填涂颜色
- 洛谷Oj-P1162 填涂颜色-广度优先搜索
- P1162 填涂颜色
- P1162 填涂颜色
- P1162 填涂颜色
- P1162 填涂颜色
- P1162 填涂颜色
- P1162 填涂颜色
- P1162 填涂颜色
- 【搜索】洛谷 P1162 填涂颜色
- 洛谷 P1162 填涂颜色 kevin_xcw
- [LUOGU] P1162 填涂颜色
- 程序员的那些需要反省的地方
- hihoCoder--1039 字符消除
- Java再初学
- [BZOJ2115][Wc2011] Xor(dfs+高斯消元求线性基+贪心)
- CodeForces - 650A Watchmen (握手定理)
- 洛谷OJ P1162填涂颜色
- 洛谷1803 凌乱的yyy(第29题)
- XHTML简介
- linux配置网络
- OIBH杯第三次模拟赛(普及组)Problem 3 : maxsum 最大约数和
- ubuntu16.04引导加密
- 斯坦福机器学习——异常检测
- 绘图组件总结
- font字体图标