记录编号 |
86232 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
[POI 1999] 位图 |
最终得分 |
100 |
用户昵称 |
雪狼 |
是否通过 |
通过 |
代码语言 |
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;
}