多源bfs
1.算法分析
多源bfs就是一开始有很多的源头,不只一个源点。处理的方法:一开始直接把所有源点放入队列;或者建立一个虚拟源点,虚拟源点到每个源点的距离为0
2.例题
acwing173矩阵距离
题意:
给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为:
dist(A[i][j],A[k][l])=|i−k|+|j−l|
输出一个N行M列的整数矩阵B,其中:
B[i][j]=min(1≤x≤N,1≤y≤M,A[x][y]=1)dist(A[i][j],A[x][y])。N、M~1e3
代码:
#include <bits/stdc++.h>
using namespace std;
struct POS {
int x, y, step;
};
int const N = 1e3 + 10;
int a[N][N], b[N][N];
int n, m;
queue<POS> q;
int dx[] = {
1, 0, -1, 0}, dy