记录编号 86232 评测结果 AAAAAAAAAAAAAAAA
题目名称 [POI 1999] 位图 最终得分 100
用户昵称 Gravatar雪狼 是否通过 通过
代码语言 C++ 运行时间 0.046 s
提交时间 2014-01-22 20:09:12 内存使用 0.45 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#define MAX_N 182+10
#define REP(i,a,b) for(int i=a;i!=b+1;++i)
#define CLR(a,x) memset(a,x,sizeof(a));
using namespace std;

struct point{int x,y;};
int n,m,map[MAX_N][MAX_N];
int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
queue<point>Q;
void setIO(string s){
	string in=s+".in",out=s+".out";
	freopen(in.c_str(),"r",stdin);
	freopen(out.c_str(),"w",stdout);
}
void read(){
	char s[MAX_N];
	scanf("%d%d\n",&n,&m);
	REP(i,1,n){
		scanf("%s",s);
		REP(j,1,m)map[i][j]=(s[j-1]=='1')?1:0;
	}
}
void work(){
	REP(i,1,n)REP(j,1,m)if(map[i][j]==1)Q.push((point){i,j});
	while(!Q.empty()){
		point t=Q.front();Q.pop();
		REP(i,0,3){
			int X=t.x+dx[i],Y=t.y+dy[i];
			if(X<=0||X>n||Y<=0||Y>m)continue;
			if(map[t.x][t.y]+1<map[X][Y]||!map[X][Y]){
				map[X][Y]=map[t.x][t.y]+1;
				Q.push((point){X,Y});
			}
		}
	}
	REP(i,1,n){REP(j,1,m)printf("%d ",map[i][j]-1);printf("\n");}
}
int main(){
	setIO("bit");
	read();
	work();
	return 0;
}