首先,最短路径问题在树以及树的遍历:宽度优先搜索BFS c++的代码实现-优快云博客中的最后一道例题中讲过,但这只是最短路径问题中边权为1的特殊的分支之一。读者可以在阅读本篇之前思考一下,如果边权不为1的时候该怎么编码,只用普通的BFS(queue)可以实现吗?
最短路径问题分很多种,其中最为特殊的也就是边权为1的最短路径问题,其次,还有边权为0或1的,那么这时候就需要要用到双端队列了(deque),但这并不是本篇的主题。本篇要讲的是边权为3,6,4之类的最短路径问题,也就是BFS(宽度优先搜索)+优先队列。
其实BFS(宽度优先搜索)+优先队列我们也可以将其看作是Dijkstra算法,但两者之间还是有些许的区别,当优先队列中的优先级是距离起点的最小值时,那么BFS(宽度优先搜索)+优先队列=Dijkstra算法,我们甚至可以延申出A*算法以及IDA*算法等。
最短路径问题也有很多解法,但最主要的解法还是BFS(宽度优先搜索)+优先队列。接下来,我们以下图为例。