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 ;
}

最新文章

  1. android ANR产生原因和解决办法
  2. 【转】sql to_char 日期转换字符串
  3. TransactionScope 使用记录
  4. web服务器和ftp服务器有什么区别
  5. java的向上转型总结
  6. 【12-JDBC编程】
  7. 是否要学SpringMVC
  8. [刘阳Java]_Java环境搭建_第2讲
  9. UICollectionView未充满时也可以滚动
  10. 阿里 Java面试 知识点
  11. &lt;转&gt;Python 参数知识(变量前加星号的意义)
  12. 微软阵营企稳的利好消息:.NET开源、Visual Studio免费
  13. HDOJ 1056 HangOver(水题)
  14. 怎样建立一个bower私库
  15. SE 2014 年4月21日(一)
  16. Ionic start 创建项目报错 Error with start undefined
  17. h5 测试关注点
  18. Dynamics 365 Online用户密码三问及其解答
  19. centos7下更改docker镜像和容器的默认路径
  20. 解决VMware虚拟机报错“无法连接MKS:套接字连接尝试次数太多,正在放弃”

热门文章

  1. 我家很管事的猫——mycat初步部署实践与问题排查
  2. asp.net core 设置默认文档index.html
  3. NOIP2018货币系统
  4. Leetcode刷题记录(python3)
  5. unity 之 自定义弹出框
  6. fenby C语言 P10
  7. deepin15.7挂载/home到单独的分区:
  8. Android_Bundle
  9. 【MySQL】MySQL Workbench快捷键小结
  10. C++学习笔记7_多态