记录编号 203867 评测结果 AAAAAAAAAAAAAAAA
题目名称 [POI 1999] 位图 最终得分 100
用户昵称 Gravatar0 是否通过 通过
代码语言 C++ 运行时间 0.342 s
提交时间 2015-11-03 19:14:29 内存使用 0.51 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=200;
const int gx[4]={-1,0,1,0};
const int gy[4]={0,1,0,-1};
char t[MAXN];
bool ok[MAXN][MAXN];
int dis[MAXN][MAXN],n,m;
struct At{int x,y,d;};
queue<At>q;
inline void print(){
	for(int i=1;i<=n;++i) {
		for(int j=1;j<=m;++j) {
			printf("%d ",dis[i][j]);
		}
		puts("");
	}
}
inline int ABS(int a){return a<0?-a:a;}
inline int dist(int x,int y,int xx,int yy){return ABS(x-xx)+ABS(y-yy);}
inline int Min(int a,int b){return a<b?a:b;}
inline void Bfs(){
	while(!q.empty()){
		int qx=q.front().x,qy=q.front().y,ci=q.front().d;q.pop();
		for(int i=0,temp;i<4;++i) {
			int nx=qx+gx[i],ny=qy+gy[i];
			if(nx<1||ny<1||nx>n||ny>m||ok[nx][ny]) continue;
			temp=dist(qx,qy,nx,ny);if(dis[nx][ny]>temp+ci){
				dis[nx][ny]=temp+ci;
                q.push((At){nx,ny,ci+temp});
			}
		}
	}
}
int main(){
	freopen("bit.in","r",stdin);
	freopen("bit.out","w",stdout);
	memset(dis,0x3f,sizeof(dis));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i) {
		scanf("%s",t+1);
		for(int j=1;j<=m;++j) {
			if(t[j]=='1') {
				ok[i][j]=1;//白棋子
			}
		}
	}
	for(int i=1;i<=n;++i) {
		for(int j=1;j<=m;++j) {
			if(ok[i][j]==1){
				dis[i][j]=0;
				q.push((At){i,j,0});
				Bfs();
			}
		}
	}
	print();
	return 0;
}