记录编号 380112 评测结果 AAAAAAAAAAAAAAAA
题目名称 [POI 1999] 位图 最终得分 100
用户昵称 Gravatarwangbinghai 是否通过 通过
代码语言 C++ 运行时间 0.085 s
提交时间 2017-03-08 14:23:55 内存使用 0.46 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,m;
int a[200][200];
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
queue<int>q,p;

void bfs(){
	while(!q.empty()){
		int x = q.front(),y = p.front();
		q.pop();p.pop();
		for(int i = 0; i < 4;i++){
			int xx = x + dx[i],yy = y + dy[i];
			if(xx >= 1 && xx <= n && yy >= 1&& yy <= m && a[xx][yy] != 0 ){
				if(a[xx][yy] == -1){
					a[xx][yy] = a[x][y] + 1;
					q.push(xx);p.push(yy);
				}
				else{
					if(a[xx][yy] > a[x][y] + 1){
						a[xx][yy] = a[x][y] + 1;
						q.push(xx);p.push(yy);
					}
				}
			} 
		}
	}
}

void input(){
	scanf("%d%d", &n, &m);
	memset(a,-1,sizeof(a));
	for(int i = 1; i <= n; i++){
		char s[200];
		scanf("%s", s);
		for(int j = 0; j < m; j++){
			if(s[j] == '1'){
				a[i][j+1] = 0;
				q.push(i);p.push(j+1);
			}
		}
	}
}

void output(){
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++)printf("%d ",a[i][j]);
		printf("\n");
	}
}

void solve(){
	bfs();
}
int main(){
	freopen("bit.in","r",stdin);
	freopen("bit.out","w",stdout);
	input();
	solve();
	output();
}