标签:style blog class code java color
“ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色。
图1 图2
已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点)。
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
认真读题目不要把宽和高弄反了,在原有的图像外围添加了两圈,最外圈值为-1,第二圈值为1
值为-1的圈限制界限避免超界,值为1的圈可以免去第一个点的确定
#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <cstring> using namespace std; typedef pair<int,int> Point; int pixel[965][1445]; const int dx[] = {-1,0,1,0}; const int dy[] = {0,1,0,-1}; void bfs(int x, int y){ queue<Point> q; q.push(Point(x,y)); while(!q.empty()){ Point tmp = q.front();q.pop(); for(int i = 0 ; i <4; ++ i){ int xx =tmp.first+dx[i] ,yy = tmp.second+dy[i]; if(pixel[xx][yy]>0){ q.push(Point(xx,yy)); pixel[xx][yy] = 0; } } } } int main(){ int n; cin >> n; while(n--){ int w,h; cin >> h >> w; memset(pixel,-1,sizeof(pixel)); for(int i = 1; i <= h+2; ++ i) pixel[1][i] = pixel[w+2][i]=1; for(int i = 1; i <= w+2; ++ i) pixel[i][1] = pixel[i][h+2]=1; for(int i = 2; i <= w+1; ++ i){ for(int j = 2; j <= h+1; ++ j){ cin >> pixel[i][j]; } } bfs(1,1); for(int i = 2; i <= w+1; ++ i){ for(int j = 2; j <= h+1; ++ j){ if(j != 2) cout<<" "; cout<<pixel[i][j]; } cout<<endl; } } }
标签:style blog class code java color
原文地址:http://www.cnblogs.com/xiongqiangcs/p/3709865.html