文章目录
- 矩阵距离
一、矩阵距离
本题思路:
#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;
}