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

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 }

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

时间: 2024-08-25 13:03:58

nyoj 92-图像有用区域 (BFS)的相关文章

nyoj 92 图像有用区域 【bfs】

图像有用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色.       图1                                                        图2 已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0

nyoj 92 图像有用区域

图像有用区域 时间限制:3000 ms  |            内存限制:65535 KB 难度:4 描述 “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色.       图1                                                        图2 已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(

NYOJ92 图像有用区域 【BFS】

碰到了一个以前从未见过的奇怪问题:先上截图: 运行号 用户 题目 结果 时间 内存 语言 提交时间 895360 长木 图像有用区域 Accepted 508 5724 C/C++ 06-13 19:26:41 895352 长木 图像有用区域 MemoryLimitExceeded -- -- C/C++ 06-13 18:24:34 895351 长木 图像有用区域 MemoryLimitExceeded -- -- C/C++ 06-13 18:23:05 895348 长木 图像有用区域

南阳oj92--图像有用区域(Bfs)

图像有用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色.       图1                                                        图2 已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点).

ACM 图像有用区域

图像有用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色.       图1                                                        图2 已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点).

nyoj 92 图片实用面积【bfs】

图像实用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 "ACKing"同学曾经做一个图像处理的项目时.遇到了一个问题,他须要摘取出图片中某个黑色线圏成的区域以内的图片,如今请你来帮助他完毕第一步.把黑色线圏外的区域所有变为黑色.       图1                                                        图2 已知黑线各处不会出现交叉(如图2),而且.除了黑线上的点外,图像中没有纯黑色(即像素

NYOJ92 图像实用区域 【BFS】

碰到了一个曾经从未见过的奇怪问题:先上截图: 执行号 用户 题目 结果 时间 内存 语言 提交时间 895360 长木 图像实用区域 Accepted 508 5724 C/C++ 06-13 19:26:41 895352 长木 图像实用区域 MemoryLimitExceeded -- -- C/C++ 06-13 18:24:34 895351 长木 图像实用区域 MemoryLimitExceeded -- -- C/C++ 06-13 18:23:05 895348 长木 图像实用区域

nyoj--图像有用区域

描述 "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色.       图1                                                        图2 已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点). 输入 第一行输入测试数据的组数N(0<N<=6) 每组测试数据的

NYOJ 284 坦克大战 【BFS】+【优先队列】

坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" in our childhood, and some people (like me) even often play it on computer now. What we are discussing is a simple edition of this game. Given a map that co