nyoj 图像有用区域(BFS)
2016-12-12 17:27
309 查看
图像有用区域
[align=left]原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=92[/align]描述
“ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色。
图1 图2
已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点)。
输入第一行输入测试数据的组数N(0<N<=6)
每组测试数据的第一行是两个个整数W,H分表表示图片的宽度和高度(3<=W<=1440,3<=H<=960)
随后的H行,每行有W个正整数,表示该点的像素值。(像素值都在0到255之间,0表示黑色,255表示白色)
输出以矩阵形式输出把黑色框之外的区域变黑之后的图像中各点的像素值。
样例输入
1 5 5 100 253 214 146 120 123 0 0 0 0 54 0 33 47 0 255 0 0 78 0 14 11 0 0 0
样例输出
0 0 0 0 0 0 0 0 0 0 0 0 33 47 0 0 0 0 78 0 0 0 0 0 0
[align=left]思路:在矩阵的周围再加一圈,把他们都赋为1,使得原矩阵的最外圈也能检测得到,之后就BFS就好了(注意输入的是宽和长)[/align]
ps: 一直RE无底洞,,,最后看了大神的思路才明白,宽和长。。还有再加一圈。。还是思想最重要啊,思想最重要啊,思想最重要啊。
[align=left]代码:[/align]
#include<stdio.h> #include<string.h> #include<queue> using namespace std; int a[1000][1500]; int W,H; struct node { int x,y; }; int to[4][2]= {0,1,0,-1,1,0,-1,0}; void bfs(int x,int y) { node now,next; queue<node>s; now.x=x,now.y=y; s.push(now); while(!s.empty()) { now=s.front(); for(int i=0; i<4; i++) { int m=now.x+to[i][0],n=now.y+to[i][1]; if(m>=0&&n>=0&&m<=H+1&&n<=W+1&&a[m] ) { a[m] =0; next.x=m,next.y=n; s.push(next); } } s.pop(); } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&W,&H); int i,j; for(i=1; i<=H; i++) for(j=1; j<=W; j++) scanf("%d",&a[i][j]); for(i=0; i<=H+1; i++) { a[i][W+1]=1; a[i][0]=1; } for(i=0; i<=W+1; i++) { a[0][i]=1; a[H+1][i]=1; } bfs(0,0); for(i=1; i<=H; i++) { for(j=1; j<=W; j++) printf("%d ",a[i][j]); printf("\n"); } } return 0; }
相关文章推荐
- nyoj 图像有用区域(BFS)
- Android签署应用
- Android应用程序资源的编译和打包过程分析
- nyoj 图像有用区域(BFS)
- nyoj 图像有用区域(BFS)
- driver verifier检测驱动死锁
- nyoj 图像有用区域(BFS)
- nyoj 图像有用区域(BFS)
- nyoj 图像有用区域(BFS)
- nyoj 图像有用区域(BFS)
- C#调用API的一些基础
- [LeetCode]35. Search Insert Position
- Java中在特定区间产生随机数
- 关于java反射机制复习的那些事
- git 常用命令
- linux系统PXE+Kickstart自动安装系统
- Python自动化之django URL
- Linux下取代top的进程管理工具 htop
- 1212
- Retrofit+Rxjava服务器IP轮询重试机制实现