2.2.2 最短路径

2026-02-06 17:24:13 更新

【选择计算题】带权图的最短路径:求两个顶点间长度最短的路径。其中路径长度不是指路径上边数的总和,而是指路径上各边的权值总和;路径长度的具体含义取决于边上权值所代表的意义。


算法

描述

1

迪杰斯特拉算法

主要用于求单源最短路径。按路径长度递增次序产生各顶点最短路径。

2

弗洛伊德算法

是一种动态规划算法,用于解决任意两点间的最短路径问题。

基本思路:通过枚举中间节点来逐步更新节点间的最短路径。

3

贝尔曼-福特算法

是一种用于解决带有负权边的最短路径问题的动态规划算法。可以求解从单个源节点到图中所有节点的最短路径,能够检测负权回路。

基本思路:利用松弛操作逐步更新每个节点的最短路径估计值,同时使用动态规划思想, 递推求解最短路径问题。

比迪杰斯特拉算法更通用,但时间复杂度较高,不适用于边数较多的情况

4

A* (A-Star)算法

是一种启发式搜索算法。通过估计从当前节点到目标节点的最短距离来指导搜索方向,从而加快搜索速度。

时间复杂度与启发式函数有关。与迪杰斯特拉算法和贝尔曼-福特算法相比,能够更快找到最短路径,但计算启发式函数在某些情况下可能失效

5

约翰逊算法

是一种用于解决有向图上最短路径问题的算法,结合了迪杰斯特拉算法和贝尔曼-福特算法的优点

6

SPFA算法

是一种用于解决带有负权边的图上最短路径问题的算法。基于贝尔曼-福特算法作改进,通过剪枝避免重复的松弛操作,使得时间复杂度比贝尔曼-福特算法更优,实际运行效率往往比较高。

理解:“松弛”就是不断用新发现的更短路径,去更新和放松当前记录的距离值。