多源BFS(新手也能看懂版)

多源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

你可能感兴趣的:(宽度优先,算法,c++,leetcode)