文章目录
- 矩阵距离
 
一、矩阵距离
本题思路:

#include <bits/stdc++.h>
#define x first
#define y second
typedef std::pair<int,int> PII;
constexpr int N=1010;
int n,m;
char g[N][N];
int dist[N][N];
std::queue<PII> q;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
void bfs()
{
    memset(dist,-1,sizeof dist);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(g[i][j]=='1'){
                q.push({i,j});
                dist[i][j]=0;
            }
    
    while(!q.empty()){
        PII t=q.front();
        q.pop();
        
        for(int i=0;i<4;i++){
            int a=t.x+dx[i],b=t.y+dy[i];
            if(a>=0&&a<n&&b>=0&&b<m&&dist[a][b]==-1){
                dist[a][b]=dist[t.x][t.y]+1;
                q.push({a,b});
            }
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    std::cin>>n>>m;
    for(int i=0;i<n;i++) std::cin>>g[i];
    
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(g[i][j]=='1')
                q.push({i,j});
    
    bfs();
    
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)
            std::cout<<dist[i][j]<<" ";
        std::cout<<std::endl;
    }
    return 0;
} 



















