记录编号 68829 评测结果 AAAAAAAAAAAAAAAA
题目名称 [POI 1999] 位图 最终得分 100
用户昵称 Gravatarraywzy 是否通过 通过
代码语言 C++ 运行时间 0.057 s
提交时间 2013-08-30 15:59:12 内存使用 0.55 MiB
显示代码纯文本
#include<fstream>
#include<deque>
#include<string>
using namespace std;
ifstream fin("bit.in");
ofstream fout("bit.out");
int a[183][183];
int b[183][183];
bool c[183][183]={0};
int n,m;
class woca
{
public:
	int x;
	int y;
};
deque<woca>q;
void floodfill()
{
	woca s,k;
	while(!q.empty())
	{
		s=q.at(0);
		q.pop_front();
		if(s.x+1<=n&&a[s.x+1][s.y]==0&&c[s.x+1][s.y]==0)
		{
			c[s.x+1][s.y]=1;
			b[s.x+1][s.y]=b[s.x][s.y]+1;
			k.x=s.x+1;
			k.y=s.y;
			q.push_back(k);
		}
		if(s.x-1>=1&&a[s.x-1][s.y]==0&&c[s.x-1][s.y]==0)
		{
			c[s.x-1][s.y]=1;
			b[s.x-1][s.y]=b[s.x][s.y]+1;
			k.x=s.x-1;
			k.y=s.y;
			q.push_back(k);
		}
		if(s.y+1<=m&&a[s.x][s.y+1]==0&&c[s.x][s.y+1]==0)
		{
			c[s.x][s.y+1]=1;
			b[s.x][s.y+1]=b[s.x][s.y]+1;
			k.x=s.x;
			k.y=s.y+1;
			q.push_back(k);
		}
		if(s.y-1>=1&&a[s.x][s.y-1]==0&&c[s.x][s.y-1]==0)
		{
			c[s.x][s.y-1]=1;
			b[s.x][s.y-1]=b[s.x][s.y]+1;
			k.x=s.x;
			k.y=s.y-1;
			q.push_back(k);
		}
	}
}	
int main()
{
	fin>>n>>m;
	int i,j;
	woca flag;
	string OX;
	for(i=1;i<=n;i++)
    {
		fin>>OX;
		for(j=0;j<=m-1;j++)
		{
			a[i][j+1]=int(OX[j])-48;
			if(a[i][j+1]==1)
			{
				flag.x=i;
				flag.y=j+1;
				q.push_back(flag);
				b[i][j+1]=0;
				c[i][j+1]=1;
			}
        }
    }
	//////////////////
	floodfill();
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			fout<<b[i][j]<<' ';
		fout<<endl;
	}
	return 0;
}