一.算法特點
目標:找出加權圖中前往X的最短路徑
適用於:無環有向加權圖,且各邊的權值為正
二.算法思路

三.算法示例演示
如下圖,請找出結點v1到其他各個結點的最短路徑:

首先創建一個字典(散列表),該字典的鍵表示結點名字,值表示從v1到該結點的最短路徑。下圖中,字典初始化后只有v1的鄰居節點被寫入值:

按照算法的思路,我們先找到距離起點最近的結點(v3),結點v3已經是最短路徑了(因為迪傑特斯拉算法處理的是邊權值為正的圖,所以經其他任何節點再到v3的路徑和不會小於v1到v3的權值,之后的步驟同理)。接着尋找v3的鄰居節點(v4),更新v4的開銷為10+50=60。此外,要完成這個需求,還應該定義一個字典,保存結點的父節點信息。此處將v4的父節點標為v3,並且把v3標記為處理過的結點。

接着再找到下一個距離v1最近並且沒有被標記過的結點,重復以上步驟,v5的鄰居節點有v4和v6兩個,經過v5到達v4和v6的路徑分別為50和90,將字典中對應的值修改后,將v4和v6的父節點改為v5(此處若經過v5的值大於原來的值則不應該修改父節點),標記v5為已處理結點。

繼續按照循環的思路,最后字典被修改為:

到目前,只有v2結點沒有被處理過了。然而此時應當理解∞的含義,即沒有任何一個結點可以到達v2結點,因此v2結點是不可到達的,沒有最近距離。通過上述字典和記錄父節點的列表即可求出最短距離及最短路徑。
四.算法實現(Python)
