图像有用区域

点击打开链接


题目有点坑,注意先输入N,后输入M,优化在图的最外层再添加一层

// File Name: nyoj92.cpp
// Author: bo_jwolf
// Created Time: 2013年04月30日 星期二 15:20:24

#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<queue>
using namespace std;
const int maxn = 1500 ;
int mapp[ maxn ][ maxn ];
int visited[ maxn ][ maxn ];
int m , n ;
int dis[ 4 ][ 2] = { { -1 , 0 } , { 1 , 0 } , { 0 , 1 } , { 0 , -1 } }; 
struct node
{
	int x , y ;
}next , cur ;

void bfs( int x , int y )
{
//	cout << "aaaaaaaaaaaa";
	int i;
	queue< node > Q ;
	cur.x = x ;
	cur.y = y ;
	Q.push( cur );
	while( !Q.empty() )
	{
		cur = Q.front();
		Q.pop();
		for( i = 0 ; i < 4 ; i++ )
		{
			next.x = cur.x + dis[ i ][ 0 ] ;
			next.y = cur.y + dis[ i ][ 1 ] ;
			if( next.x < 0 || next.x > m + 1 || next.y < 0 || next.y > n + 1 || mapp[ next.x ][ next.y ] == 0 )//注意顺序,放在最前面判断,可能会出现bug
				continue ;
			mapp[ next.x ][ next.y ] = 0 ;
			Q.push( next ) ;
		//	cout<< "aaaaaaaaaaa";
		}
	}
}

int main()
{
	int Case ;
	cin >> Case ;
	int i , j ;
	while( Case-- )
	{
		cin >> n >> m;
		for( i = 0 ; i <= m ; i++ )
			mapp[ i ][ 0 ] = mapp[ i ][ n + 1 ] = 1 ;
		for( j = 0 ; j <= n ; j++ )
			mapp[ 0 ][ j ] = mapp[ m + 1 ][ j ] = 1;

		for( i = 1 ;i <= m ; i++ )
			for( j = 1 ; j <= n ; j++ )
				cin >> mapp[ i ][ j ] ;
		bfs( 0 , 0 ) ;
		for( i = 1 ; i <= m ; i++ )
			for( j = 1 ; j <= n ; j++ )
				if( j == n )
					cout << mapp[ i ][ j ] << endl ;
				else
					cout << mapp[ i ][ j ] << ' ' ;
	}
	return 0;
}


原文地址:https://www.cnblogs.com/javawebsoa/p/3052253.html