多源最短路借助bfs
作者:
巷港
,
2022-03-15 23:19:24
,
所有人可见
,
阅读 163
矩阵距离
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef pair<int,int>PII;
#define x first
#define y second
const int N = 1010;
char g[N][N];
int d[N][N];
int n,m;
void bfs()
{
queue<PII>q;
memset(d,-1,sizeof d);
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
if (g[i][j]=='1')
{
q.push({i,j});
d[i][j]=0;
}
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
while (q.size())
{
PII t = q.front();
q.pop();
for (int i=0;i<4;i++)
{
int x = t.x+dx[i];
int y = t.y+dy[i];
if (x>=0&&x<n&&y>=0&&y<m&&d[x][y]==-1)
{
d[x][y]=d[t.x][t.y]+1;
q.push({x,y});
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=0;i<n;i++) scanf("%s",g[i]);
bfs();
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
printf("%d ",d[i][j]);
printf("\n");
}
return 0;
}