zoukankan      html  css  js  c++  java
  • 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         
  • 相关阅读:
    【串线篇】Mybatis缓存原理
    【串线篇】Mybatis之动态sql
    【串线篇】Mybatis之模糊查询
    【串线篇】sql映射文件-分布查询(上)association 1-1
    【串线篇】SQL映射文件-联合查询(完结association+cellection)
    【串线篇】加谈数据库之连接join
    【串线篇】数据库设计之加谈n-n
    【串线篇】SQL映射文件-resultMap自定义封装
    【串线篇】sql注入问题
    【串线篇】SQL映射文件select简单查询标签
  • 原文地址:https://www.cnblogs.com/yaling/p/3043161.html
Copyright © 2011-2022 走看看