眩しさだけは、忘れなかった。|

Dijkstra 算法的手动分析

Dijkstra 算法

以下面有向图为例:

10

5

2

3

1

9

2

7

6

4

V0

V1

V4

V2

V3

step0. 初始状态

  • final 数组:标记各顶点是否已找到最短路径
V0 V1 V2 V3 V4
True False False False False
  • dist 数组:记录从源点(V0)到该点(Vi)的最短路径长度
V0 V1 V2 V3 V4
0 10 5
  • path 数组:路径上的前驱(前面的结点)
V0 V1 V2 V3 V4
-1 0 -1 -1 0

step1. 第一轮

【1】找到 step0 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V4,令 final[i] = True。

  • final 数组:
V0 V1 V2 V3 V4
True False False False True

【2】检查所有邻接自 Vi = V4 的点,若其 final 值为 False,则对比 step0 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

对于 V1(原本 dist = 10, path = 0):final 值为 False,从 V0-->V4-->V1 的路径长度为 5+3=8<10,所以需要更新其 dist =8,path = 4;

对于 V2(原本 dist = ∞, path = -1):final 值为 False,从 V0-->V4-->V2 的路径长度为 5+9=14<∞,所以需要更新其 dist =14,path = 4;

对于 V3(原本 dist = ∞, path = -1):final 值为 False,从 V0-->V4-->V3 的路径长度为 5+2=7<∞,所以需要更新其 dist =7,path = 4。

  • dist 数组:
V0 V1 V2 V3 V4
0 8 14 7 5
  • path 数组:
V0 V1 V2 V3 V4
-1 4 4 4 0

step2. 第二轮

【1】找到 step1 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V3,令 final[i] = True。

  • final 数组:
V0 V1 V2 V3 V4
True False False True True

【2】检查所有邻接自 Vi = V3 的点(对应 dist = 7,path = 4),若其 final 值为 False,则对比 step1 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

对于 V0:final 值为 True。

对于 V2(原本 dist = 14,path = 4):final 值为 False,从 V0-->V4-->V3-->V2 的路径长度为 7+6=13<14,所以需要更新其 dist =13,path = 3。

  • dist 数组:
V0 V1 V2 V3 V4
0 8 13 7 5
  • path 数组:
V0 V1 V2 V3 V4
-1 4 3 4 0

step3. 第三轮

【1】找到 step2 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V1,令 final[i] = True。

  • final 数组:
V0 V1 V2 V3 V4
True True False True True

【2】检查所有邻接自 Vi = V1 的点(对应 dist = 8,path = 4),若其 final 值为 False,则对比 step2 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

对于 V2(原本 dist = 13,path = 3):final 值为 False,从 V0-->V4-->V1-->V2 的路径长度为 8+1=9<13,所以需要更新其 dist =9,path = 1。

对于 V4:final 值为 True。

  • dist 数组:
V0 V1 V2 V3 V4
0 8 9 7 5
  • path 数组:
V0 V1 V2 V3 V4
-1 4 1 4 0

step4. 第四轮

【1】找到 step2 中 :final 数组还未确定的最短路径,且在 dist 数组中最小的顶点 Vi = V2,令 final[i] = True。

  • final 数组:
V0 V1 V2 V3 V4
True True True True True

【2】检查所有邻接自 Vi = V2 的点(对应 dist = 9,path = 1),若其 final 值为 False,则对比 step2 中的 dist 信息,如果找到的路径比当前的信息还小,则更新其 dist 和 path 信息。

已经找不到其他未访问结点,算法结束,以下为最终结果:

  • dist 数组:
V0 V1 V2 V3 V4
0 8 9 7 5
  • path 数组:
V0 V1 V2 V3 V4
-1 4 1 4 0

本文作者:漫舞八月(Mount256)

本文链接:https://www.cnblogs.com/Mount256/p/18241843

版权声明:本作品采用CC 4.0 BY-SA许可协议进行许可。

posted @   漫舞八月(Mount256)  阅读(34)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 Main Menu Theme Syd Matters
  2. 2 Luminous Memory (Acyanxi Remix) Acyanxi
  3. 3 夏影 麻枝准
  4. 4 潮騒の香り 水月陵
  5. 5 stand still 井口裕香 (いぐち ゆか)
  6. 6 流星雨 麻枝准
  7. 7 Summer Fantasy 傅许
  8. 8 失う 米白
  9. 9 epilogue 霜月はるか
  10. 10 夏に君を待ちながら 小原好美
  11. 11 桜のような恋でした 鹿乃 (かの)
  12. 12 風は微かに、熱を残し… 水月陵
  13. 13 夏凪ぎ 麻枝准/やなぎなぎ
  14. 14 空に光る 戸越まごめ
  15. 15 木漏れ日 riya
  16. 16 Songbirds Homecomings (ホームカミングス)
  17. 17 宝物になった日 麻枝准/やなぎなぎ
  18. 18 夏影~あの飛行機雲を超えた、その先へ~ 雪桜草 (雪樱草)
  19. 19 快晴 Orangestar (蜜柑星P),初音未来 (初音ミク)
  20. 20 永遠 霜月はるか
  21. 21 Sion 天門
  22. 22 遙かな年月-piano- 麻枝准
  23. 23 夏恋慕 kobasolo/春茶
  24. 24 夏凪ぎ-piano ver.- MANYO/麻枝准
  25. 25 Goodbye Seven Seas -piano ver.- MANYO/麻枝准
  26. 26 Light Years 麻枝准/やなぎなぎ
  27. 27 優しさの記憶 鹿乃 (かの)
夏影 - 麻枝准
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.