NYOJ—图像有用区域【广搜BFS】
来源:互联网 发布:杭州淘宝客服招聘 编辑:程序博客网 时间:2024/06/08 19:22
图像有用区域
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
“ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色。
已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点)。
输入
第一行输入测试数据的组数N(0
输出
以矩阵形式输出把黑色框之外的区域变黑之后的图像中各点的像素值。
样例输入
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
思路
使用广搜,一定要广搜!!一定要广搜!!!!重要的事情说三遍第一眼看见就用深搜了结果一直RE,一直在研究数组是不是会越界,后来想明白了RE的原因是深搜的时候递归调用太多堆栈溢出了,改成bfs就过了.注意坑点 搞清楚w是宽h是高不要用反,搜索的时候需要在外面一圈附上非零的值,为什么要这么做呢 ,如果不再外面一圈附上非零的值的话,下图1 的情况搜索时就无法找到右下脚的一片,经过处理后如图2,则可以找到所有在所画黑框外的像素
#include <iostream>#include <stdio.h>#include <cstring>#include <queue>using namespace std;struct zuobiao{ int x,y;}p,k;int t[2000][2000];int w,h,n;int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};queue<zuobiao>q;void bfs(int q_x,int q_y){ while(!q.empty())q.pop(); p.x=q_x; p.y=q_y; q.push(p); while(!q.empty()) { p=q.front(); q.pop(); for(int i=0;i<4;i++) { k.x=p.x+dir[i][0]; k.y=p.y+dir[i][1]; if(k.x>=0&&k.x<=h+1&&k.y>=0&&k.y<=w+1&& t[k.x][k.y]!=0)//在有效范围内且不为0的赋值为0 { t[k.x][k.y]=0; q.push(k); } } }}int main(){ int i,j; cin>>n; while(n--) { memset(t,-1,sizeof(t)); //全部刷为-1 cin>>w>>h; for(int i=1;i<=h;i++)//从(1,1)开始储存保证图像外面一圈都为-1 for(int j=1;j<=w;j++) scanf("%d",&t[i][j]); bfs(0,0); for(i=1;i<=h;i++) { for(j=1;j<w;j++) printf("%d ",t[i][j]); printf("%d\n",t[i][j]); } } return 0;}
0 0
- NYOJ—图像有用区域【广搜BFS】
- NYOJ 92图像的有用区域 (技巧性广搜)
- NYOJ 92 图像有用区域(广搜)
- NYOJ92 图像有用区域(广搜BFS)
- NYOJ-92 图像有用区域 BFS
- nyoj 92 图像有用区域 【bfs】
- NYOJ 92--图像有用区域【BFS && 水题】
- NYOJ 92 图像有用区域 【bfs】
- nyoj--92 图像有用区域(bfs)
- NYOJ 92 图像有用区域 (BFS)
- nyoj 图像有用区域(BFS)
- nyoj ACM:图像有用区域 (bfs)
- nyoj 92 图像有用区域 bfs
- NYOJ-92 图像有用区域(bfs)
- 【NYOJ-92- 图像有用区域-BFS】
- NYOJ 92 图像有用区域 bfs
- NYOJ 92 图像有用区域(BFS)
- 图像有用区域(广搜)
- sqlserver sqlserver2008r2导入mdf/ldf文件小结
- 假设检验
- UCOS-III 消息队列正确使用方法
- HTML
- 大数据开发初探
- NYOJ—图像有用区域【广搜BFS】
- 网络编程_TCP协议发送和接收数据图解
- 使用宏将数字的二进制奇数位偶数位交换
- DIY专区一、 用摄像头及激光来测距(opencv)
- bzoj 3450: Tyvj1952 Easy
- 一种冒泡排序
- MyBatis操作数据库的两种方式
- 开源 java CMS
- 题目1000:计算a+b