图像有用区域

点击打开链接


题目有点坑,注意先输入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;

}


 

 

你可能感兴趣的:(图像)