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