最短路问题

最短路径问题是图论研究中的一个经典算法问题，旨在寻找图（由结点和路径组成的）中两结点之间的最短路径。算法具体的形式包括：
 确定起点的最短路径问题 - 也叫单源最短路问题，即已知起始结点，求最短路径的问题。在边权非负时适合使用Dijkstra算法，若边权为负时则适合使用Bellman-ford算法或者SPFA算法。
 确定终点的最短路径问题 - 与确定起点的问题相反，该问题是已知终结结点，求最短路径的问题。在无向图中该问题与确定起点的问题完全等同，在有向图中该问题等同于把所有路径方向反转的确定起点的问题。
 确定起点终点的最短路径问题 - 即已知起点和终点，求两结点之间的最短路径。
 全局最短路径问题 - 也叫多源最短路问题，求图中所有的最短路径。适合使用Floyd-Warshall算法。

用于解决最短路径问题的算法被称做“最短路径算法”，有时被简称作“路径算法”。最常用的路径算法有：
 Dijkstra算法
 A*算法
 Bellman-Ford算法
 SPFA算法（Bellman-Ford算法的改进版本）
 Floyd-Warshall算法

 双向搜索

 单源最短路径算法 

 无向图 
权值要求时间复杂度作者ℝ+Dijkstra 1959ℝ+Johnson 1977 (二叉堆)ℝ+Fredman & Tarjan 1984 (斐波那契堆)ℕThorup 1999 (要求常数时间复杂度的乘法)。

 无权图 
算法时间复杂度作者广度优先搜索Konrad Zuse 1945,Moore 1959

 有向无环图 
使用拓扑排序算法可以在有权值的DAG中以线性时间（）求解单源最短路径问题。

 无负权的有向图 
假设边缘权重均为整数。
算法时间复杂度作者O(V 2EL)Ford 1956Bellman–Ford 算法O(VE)Shimbel 1955, Bellman 1958, Moore 1959O(V 2 log V)Dantzig 1960Dijkstra's 算法（列表）O(V 2)Leyzorek et al. 1957, Dijkstra 1959, Minty (see Pollack & Wiebenson 1960), Whiting & Hillier 1960Dijkstra's 算法（二叉堆）O((E + V) log V)Johnson 1977………………Dijkstra's 算法（斐波那契堆）O(E + V log V)Fredman & Tarjan 1984, Fredman & Tarjan 1987O(E log log L)Johnson 1981, Karlsson & Poblete 1983Gabow's 算法O(E logE/V L)Gabow 1983, Gabow 1985Ahuja et al. 1990ThorupO(E + V log log V)Thorup 2004

 参见 

 图论
 离散数学
 算法导论
 寻路
 IEEE 802.1aq
 网络流
 最短路徑樹

Category:图算法
Z
Category:多项式时间问题