Dijkstra最短路径算法

Dijkstra最短路径算法

求单源到其他所有节点的最短路径,时间复杂度o( n^2 )

算法特点:

每次找出前一次迭代后具有最低费用的节点,添加到集合中;

第k次迭代后,可以知道到k个目的节点的最低费用路径;

伪代码:

Initialize:
N'={u}
for all nodes v
   if v is a neighbor of u
   	   then D(v) =C(u,v)
   else D(v)=∞

Loop
   find w not in N' such that D(w) is a minimum
   add w to N'
   update D(v) for each neighbor v of w and not in N'
          D(v) =min (D(v), D(w)+C(w,v))
   /** new cost to v is either old cost to v or known
   least path cost to w plus cost from w to v
   */
Until N'=N

以下是一个实例(出现在计算机网络的路由选择问题中):
Dijkstra最短路径算法
以下表格展示了算法的执行过程:

D(v) 表示从源节点到v的路径大小,
P(v)表示从源节点到v的最短路径的前一节点

步骤 节点子集N D(v),P(v) D(w),P(w) D(x),P(x) D(y),P(y) D(z),P(z)
0 u 2,u 5,u 1,u
1 ux 2,u 4,x 2,x
2 uxy 2,u 3,y 4,y
3 uxyv 3,y 4,y
4 uxyvw 4,y
5 uxyvwz

Dijkstra算法在计算机网络的路由选择算法中有应用