173. 矩阵距离【多源 BFS】

在这里插入图片描述

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/123726002