多源BFS与单源BFS的区别
单源BFS:是一个起点到一个终点的最短路问题
多源BFS:是多个起点到一个终点的最短路问题
怎么解决多源BFS问题
正常来说,在我们会了单源BFS的使用后,面对多个起点到一个终点的最短路问题也就是多源BFS,我们最先想到的就是暴力做法,也就是将多个起点分成一份份一个起点到一个终点的单源BFS问题,这样我们每个起点到终点的最短路都求出来再找最小值即可,但这种暴力几乎是一定超时的,最差时间复杂度都达到ON^3
一个一个起点算最短路会超时,那如果多个起点一块呢?
这时我们就发现,如果多个起点一块进行BFS搜索,重复的路程不再经过,这时不仅得出的答案正确,而且时间复杂度大大降低,这也就是多源BFS的核心思路,多个起点同时用单源BFS的方法去找最短路
核心代码几乎跟单源BFS一样,就是在最前面不是把一个起点加入队列,而是把多个起点全部加入队列
加下来借助力扣的几个题目来进行练习:
力扣542.01 矩阵:https://leetcode.cn/problems/01-matrix/
解析和AC代码:https://blog.csdn.net/cjqhwwhm/article/details/141613229?spm=1001.2014.3001.5501
力扣1020 飞地的数量:https://leetcode.cn/problems/number-of-enclaves/
解析和AC代码:https://blog.csdn.net/cjqhwwhm/article/details/141613757?spm=1001.2014.3001.5501
力扣1765 地图中最高点:https://leetcode.cn/problems/map-of-highest-peak/
解析和AC代码:https://blog.csdn.net/cjqhwwhm/article/details/141613859?spm=1001.2014.3001.5501