码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj 92-图像有用区域 (BFS)

时间:2018-08-01 22:31:49      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:main   bad   -o   eps   space   判断   项目   false   mes   

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++:

  1 #include <iostream>
  2 #include <algorithm>
  3 #include <cstring>
  4 #include <cstdio>
  5 #include <cmath>
  6 #include <stack>
  7 #include <set>
  8 #include <map>
  9 #include <queue>
 10 #include <climits>
 11 #include <bitset>
 12 #define eps 1e-6
 13 
 14 using namespace std;
 15 int n, m, my_map[965][1450], my_book[965][1450], my_mov[4][2] = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}};
 16 
 17 struct node
 18 {
 19     int h, w;
 20 };
 21 
 22 bool my_judge(node q2)
 23 {
 24     if (q2.h < 0 || q2.w < 0 || q2.w > n + 1 || q2.h > m + 1) return false;
 25     if (!my_map[q2.h][q2.w]) return false;
 26     if (my_book[q2.h][q2.w]) return false;
 27     return true;
 28 }
 29 
 30 void bfs(int h, int w)
 31 {
 32     node q1, q2;
 33     q1.h = h, q1.w = w;
 34     queue <node> Q;
 35     Q.push(q1);
 36     my_book[h][w] = 1;
 37     while (!Q.empty())
 38     {
 39         q1 = Q.front();
 40         for (int i = 0; i < 4; ++ i)
 41         {
 42             q2 = q1;
 43             q2.h = q1.h + my_mov[i][0];
 44             q2.w = q1.w + my_mov[i][1];
 45             if (my_judge(q2))
 46             {
 47                 my_book[q2.h][q2.w] = 1;
 48                 Q.push(q2);
 49             }
 50         }
 51         Q.pop();
 52     }
 53 }
 54 
 55 int main()
 56 {
 57     ios::sync_with_stdio(false);
 58     int t;
 59     scanf("%d", &t);
 60     while (t --)
 61     {
 62         scanf("%d%d", &n, &m); // n 宽度
 63 
 64         /**
 65             初始化边界
 66         */
 67         for (int i = 0; i <= n; ++ i) {
 68             my_map[0][i] = my_map[m + 1][i] = 1;
 69         }
 70         for (int i = 0; i <= m; ++ i) {
 71             my_map[i][0] = my_map[i][n + 1] = 1;
 72         }
 73 
 74         /**
 75             输入数据
 76         */
 77         for (int i = 1; i <= m; ++ i)
 78         {
 79             for (int j = 1; j <= n; ++ j)
 80                 scanf("%d", &my_map[i][j]);
 81         }
 82 
 83         /**
 84             初始化判断条件
 85         */
 86         memset(my_book, 0, sizeof(my_book));
 87 
 88         bfs(0, 0);
 89 
 90         for (int i = 1; i <= m; ++ i)
 91         {
 92             for (int j = 1; j <= n; ++ j)
 93                 if (!my_book[i][j])
 94                     printf("%d ", my_map[i][j]);
 95                 else
 96                     printf("0 ");
 97             printf("\n");
 98         }
 99     }
100 
101     return 0;
102 }

 

nyoj 92-图像有用区域 (BFS)

标签:main   bad   -o   eps   space   判断   项目   false   mes   

原文地址:https://www.cnblogs.com/GetcharZp/p/9403752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!