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