记录编号 548657 评测结果 AAAAAAAAAAAAAAAA
题目名称 [POI 1999] 位图 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 C++ 运行时间 5.261 s
提交时间 2020-01-29 00:40:04 内存使用 18.25 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int graph[1001][1001];
int flag=0;
struct remember{
	int a,b;
}whitepoint[100001];//白像素位置
int search(int x,int y){
	if(graph[x][y]!=0){
		return 0;
	}
	else{
		int distance=0x7f7f;//与白像素之间的距离
		int temporary_distance;
		for(int i=0;i<flag;i++){//两个像素 p1 = (i1, j1) , p2 = (i2, j2) 之间定义为: d(p1, p2) = |i1 - i2| + |j1 - j2|.
			temporary_distance=abs(x-whitepoint[i].a)+abs(y-whitepoint[i].b);
			if(temporary_distance<distance){
				distance=temporary_distance; 
			} 
		}
	    return distance;//返回最短距离 
	}	
}
int main(){
	freopen("bit.in","r",stdin);
	freopen("bit.out","w",stdout);
	int n,m;
	cin>>n>>m;
	char z;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>z;
			if(z=='1'){
				graph[i][j]=1;
				whitepoint[flag].a=i;//x
				whitepoint[flag].b=j;//y
				flag++;//记录白像素数量
			}
		}
	}//读入
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(j<m-1){
				cout<<search(i,j)<<" ";
			}
			else{
				cout<<search(i,j);
			}
		}
		cout<<endl;
	}//输出 
	return 0;
}