比赛 练习赛 评测结果 AAAAAAAAAAAAAAAA
题目名称 位图 最终得分 100
用户昵称 欧鹰 运行时间 0.098 s
代码语言 C++ 内存使用 15.11 MiB
提交时间 2019-05-23 11:40:34
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 200;
int a[MAXN][MAXN],dis[MAXN][MAXN],f,e,n,m;
struct Node {
	int x,y,cnt;
};
Node q[100005];
int dx[5]= {1,0,-1,0},dy[5]= {0,1,0,-1};
int main() {
	freopen("bit.in","r",stdin);
	freopen("bit.out","w",stdout);
	memset(dis,-1,sizeof(dis));
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; i++) {
		char in[MAXN];
		scanf("%s",in+1);
		for(int j=1; j<=m; j++) {
			a[i][j]=in[j]-'0';
			if(a[i][j]) {
				dis[i][j]=0,
				q[e++]= {i,j,0};
			}
		}

	}
	while(f!=e) {
		Node nd=q[f++];
		for(int i=0; i<4; i++) {
//        	cout<<nd.x<<" "<<nd.y<<" "<<nd.cnt<<endl;
			int nx=nd.x+dx[i],ny=nd.y+dy[i];
			if(nx<1||nx>n||ny<1||ny>m||dis[nx][ny]!=-1)continue;
			dis[nx][ny]=nd.cnt+1;
			q[e++]= {nx,ny,nd.cnt+1};
		}
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++)printf("%d ",dis[i][j]);
		printf("\n");
	}
	return 0;
}