Dijkstra算法的个人理解

来源:互联网 发布:mac os sierra beta4 编辑:程序博客网 时间:2024/04/25 23:42

数据结构书上对Dijkstra算法的解释已经比较详细了,下面结合实例说说我个人的理解。作为备忘录,也给需要的朋友以参考。

假设有向图为:


其邻接矩阵为:


12345110

52

1
23


4
47
6

5
392

以下为Dijkstra算法的执行步骤:

1)S = {1} //集合S 保存已求得最短路径的顶点,初始值为1

   dist[2] = 10 //遍历第1行,dist[2] 保存从原点到点2的最短距离

   dist[5] = 5 //遍历第1行,dist[5] 保存从原点到点5的最短距离

2)Vj = V5

   S = {1, 5}

3)dist[2] = 5 + 3 = 8 < 10 //遍历第5行,修改到点2的最短距离

   dist[3] = 5 + 9 = 14 //遍历第5行

   dist[4] = 5 + 2 = 7 //遍历第5行

4)Vj = V4

   S = {1, 5, 4}

5)dist[2] = 5 + 3 = 8 //遍历第4行

   dist[3] = 5 + 2 + 6 = 13 < 14 //遍历第4行

6)Vj = V2

   S = {1, 5, 4, 2}

7)dist[3] = 5 + 3 + 1 = 9 < 13 //遍历第2行

8)Vj = V3

   S = {1, 5, 4, 2, 3}

执行结束,数组 dist[] 保存的即是从原点到各点的最短距离。