nyoj 92-图像有用区域 (BFS)
2024-10-06 13:24:51
92-图像有用区域
内存限制:64MB
时间限制:3000ms
特判: No
通过数:4
提交数:12
难度:4
题目描述:
“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
C/C++:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <set>
#include <map>
#include <queue>
#include <climits>
#include <bitset>
#define eps 1e-6 using namespace std;
int n, m, my_map[][], my_book[][], my_mov[][] = {{, }, {-, }, {, -}, {, }}; struct node
{
int h, w;
}; bool my_judge(node q2)
{
if (q2.h < || q2.w < || q2.w > n + || q2.h > m + ) return false;
if (!my_map[q2.h][q2.w]) return false;
if (my_book[q2.h][q2.w]) return false;
return true;
} void bfs(int h, int w)
{
node q1, q2;
q1.h = h, q1.w = w;
queue <node> Q;
Q.push(q1);
my_book[h][w] = ;
while (!Q.empty())
{
q1 = Q.front();
for (int i = ; i < ; ++ i)
{
q2 = q1;
q2.h = q1.h + my_mov[i][];
q2.w = q1.w + my_mov[i][];
if (my_judge(q2))
{
my_book[q2.h][q2.w] = ;
Q.push(q2);
}
}
Q.pop();
}
} int main()
{
ios::sync_with_stdio(false);
int t;
scanf("%d", &t);
while (t --)
{
scanf("%d%d", &n, &m); // n 宽度 /**
初始化边界
*/
for (int i = ; i <= n; ++ i) {
my_map[][i] = my_map[m + ][i] = ;
}
for (int i = ; i <= m; ++ i) {
my_map[i][] = my_map[i][n + ] = ;
} /**
输入数据
*/
for (int i = ; i <= m; ++ i)
{
for (int j = ; j <= n; ++ j)
scanf("%d", &my_map[i][j]);
} /**
初始化判断条件
*/
memset(my_book, , sizeof(my_book)); bfs(, ); for (int i = ; i <= m; ++ i)
{
for (int j = ; j <= n; ++ j)
if (!my_book[i][j])
printf("%d ", my_map[i][j]);
else
printf("0 ");
printf("\n");
}
} return ;
}
最新文章
- android ANR产生原因和解决办法
- 【转】sql to_char 日期转换字符串
- TransactionScope 使用记录
- web服务器和ftp服务器有什么区别
- java的向上转型总结
- 【12-JDBC编程】
- 是否要学SpringMVC
- [刘阳Java]_Java环境搭建_第2讲
- UICollectionView未充满时也可以滚动
- 阿里 Java面试 知识点
- <;转>;Python 参数知识(变量前加星号的意义)
- 微软阵营企稳的利好消息:.NET开源、Visual Studio免费
- HDOJ 1056 HangOver(水题)
- 怎样建立一个bower私库
- SE 2014 年4月21日(一)
- Ionic start 创建项目报错 Error with start undefined
- h5 测试关注点
- Dynamics 365 Online用户密码三问及其解答
- centos7下更改docker镜像和容器的默认路径
- 解决VMware虚拟机报错“无法连接MKS:套接字连接尝试次数太多,正在放弃”