记录编号 |
313292 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
[POI 1999] 位图 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.046 s |
提交时间 |
2016-09-28 23:44:12 |
内存使用 |
0.47 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int SIZEN=200;
int N,M;
char board[SIZEN][SIZEN];
queue<pair<int,int> > Q;
int F[SIZEN][SIZEN];
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
void BFS(void){
memset(F,-1,sizeof(F));//F设成-1代表尚未到达,因为F值为0代表距离为0
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(board[i][j]=='1'){
F[i][j]=0;
Q.push(make_pair(i,j));
}
}
}
while(!Q.empty()){
pair<int,int> st=Q.front();Q.pop();
for(int d=0;d<4;d++){
int x1=st.first+dx[d],y1=st.second+dy[d];
if(0<=x1&&x1<N&&0<=y1&&y1<M){
if(F[x1][y1]==-1){
F[x1][y1]=F[st.first][st.second]+1;
Q.push(make_pair(x1,y1));
}
}
}
}
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
printf("%d ",F[i][j]);
}
printf("\n");
}
}
void read(void){
scanf("%d%d",&N,&M);
for(int i=0;i<N;i++) scanf("%s",board[i]);
}
int main(void){
freopen("bit.in","r",stdin);
freopen("bit.out","w",stdout);
read();
BFS();
return 0;
}