• NYOJ 92 图像有用区域


    • 题目92

    图像有用区域

    时间限制:3000 ms  |  内存限制:65535 KB
    难度: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
    View Code
     1 #include<iostream>
     2 #include<queue>
     3 using namespace std;
     4 
     5 struct point{
     6     int x,y;
     7 }p1,p2;
     8 
     9 int w, h, map[965][1445], a[4][2] = {-1,0,0,1,1,0,0,-1};
    10 
    11 void bfs(int x1, int y1)
    12 {
    13     queue<point> pt;
    14     p1.x = x1; p1.y = y1;
    15     pt.push(p1);
    16     while(!pt.empty())
    17     {
    18         p1 = pt.front();
    19         pt.pop();
    20         for(int i = 0; i < 4; ++i)
    21         {
    22             p2.x = p1.x + a[i][0]; p2.y = p1.y + a[i][1];
    23             if(p2.x < 0 || p2.x > h+1 || p2.y < 0 || p2.y > w+1 || map[p2.x][p2.y] == 0)
    24                 continue;
    25             map[p2.x][p2.y] = 0;
    26             pt.push(p2);
    27         }
    28     }
    29 }
    30 
    31 int main()
    32 {
    33 //    freopen("in.txt","r",stdin);
    34     int t,i,j;
    35     cin>>t;
    36     while(t--)
    37     {
    38         cin>>w>>h;
    39         for(i = 0; i <= w+1; ++i)
    40             map[0][i] = map[h+1][i] = 1;
    41         for(i = 0; i <= h+1; ++i)
    42             map[i][0] = map[i][w+1] = 1;
    43         for(i = 1; i <= h; ++i)
    44             for(j = 1; j <= w; ++j)
    45                 cin>>map[i][j];
    46         bfs(00);
    47         for(i = 1; i <= h; ++i)
    48         {
    49             for(j = 1; j <= w; ++j)
    50             {
    51                 if(j == 1)
    52                     cout<<map[i][j];
    53                 else
    54                     cout<<" "<<map[i][j];
    55             }
    56             cout<<endl;
    57         }
    58     }
    59     return 0;
    60 }
    61         
  • 相关阅读:
    20145235 《信息安全系统设计基础》第06周学习总结 _01
    20145235 《信息安全系统设计基础》第05周学习总结——2
    20145235 《信息安全系统设计基础》第05周学习总结
    20145235 《信息安全系统设计基础》第03周学习总结
    20145235《信息安全系统设计基础》第2周学习总结
    20145235《信息安全系统设计基础》第1周学习总结
    《信息安全系统设计基础》第0周学习总结20145235
    20145235《Java程序设计》课程总结
    20145233 《信息安全系统设计基础》期中复习总结
    20145233 《信息安全系统设计基础》第7周学习总结
  • 原文地址:https://www.cnblogs.com/yaling/p/3043161.html
Copyright © 2020-2023  润新知