#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N][N],dist[N][N],st[N][N],n,m;
void solve()
{
int dx[4]={
-1,0,0,1};
int dy[4]={
0,-1,1,0};
queue<pair<int,int>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]) q.push({
i,j}),st[i][j]=1;
while(q.size())
{
auto temp=q.front(); q.pop();
int x=temp.first,y=temp.second;
for(int i=0;i<4;i++)
{
int tempx=x+dx[i];
int tempy=y+dy[i];
if(tempx<1||tempx>n||tempy<1||tempy>m) continue;
if(st[tempx][tempy]) continue;
dist[tempx][tempy]=dist[x][y]+1;
st[tempx][tempy]=1;
q.push({
tempx,tempy});
}
}
}
int main(void)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%1d",&a[i][j]);
solve();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) cout<<dist[i][j]<<" ";
cout<<endl;
}
return 0;
}
173. Matrix distance [multi-source BFS]
Guess you like
Origin blog.csdn.net/qq_46527915/article/details/123726002
Recommended
Ranking