比赛 练习赛 评测结果 AAAAAAAAAAAAAAAA
题目名称 位图 最终得分 100
用户昵称 liujiaqi 运行时间 0.159 s
代码语言 C++ 内存使用 14.00 MiB
提交时间 2019-05-22 15:56:47
显示代码纯文本
#include<queue>
#include<cstdio>
#define maxn 200

using namespace std;

int n,m;
int a[maxn][maxn],f[maxn][maxn],dx[4]={0,-1,0,1},dy[4]={1,0,-1,0};
bool vis[maxn][maxn];

struct node{int x,y;};
queue<node>q;

int main(){
	freopen("bit.in","r",stdin);
	freopen("bit.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			scanf("%1d",&a[i][j]);
			if(a[i][j]){
				vis[i][j]=1;q.push((node){i,j});
			}
		}
	while(!q.empty()){
		int x=q.front().x,y=q.front().y;q.pop();
		for(int i=0;i<4;i++){
			int xx=x+dx[i],yy=y+dy[i];
			if(xx>0&&xx<=n&&yy>0&&yy<=m&&(!vis[xx][yy])){
				vis[xx][yy]=1;f[xx][yy]=f[x][y]+1;
				q.push((node){xx,yy});
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)printf("%d ",f[i][j]);
		printf("\n");
	}
	return 0;
}