记录编号 |
548657 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
[POI 1999] 位图 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
是否通过 |
通过 |
代码语言 |
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;
}