#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define x first
#define y second
using namespace std;
const int N = 1010;
typedef pair<int,int> PII;
int n,m;
int dist[N][N];
char g[N][N];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
void bfs()
{
memset(dist,-1,sizeof dist);
queue<PII> q;
for(int i = 0 ; i < n ; i++)
for(int j = 0 ; j < m ; j++)
{
if(g[i][j]=='1')
{
dist[i][j] = 0 ;
q.push({i,j});
}
}
while(q.size())
{
PII t = q.front();
q.pop();
for(int i = 0 ; i < 4 ; i++)
{
int a = t.x+dx[i];
int b = t.y+dy[i];
if(a < 0 || a >= n || b < 0 || b >= m || dist[a][b]!=-1) continue;
dist[a][b] = dist[t.x][t.y]+1;
q.push({a,b});
}
}
}
int main()
{
cin >> n >> m;
for(int i = 0 ; i < n ; i++) cin >> g[i];
bfs();
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < m ; j++)
printf("%d ",dist[i][j]);
puts("");
}
return 0;
}
多源BFS
最新推荐文章于 2025-06-12 00:21:00 发布