1. 程式人生 > >[圖論]Dijkstra 演算法小結

[圖論]Dijkstra 演算法小結

 演算法簡單證明:Dijkstra2張表(OPEN,CLOSE),我們可以認為一個表儲存已經已經計算出最短路徑的頂點(假設U),而另一個則儲存沒有計算出最短路徑的頂點(假設V)Dijkstra每次都取出具有最短路徑的頂點(假設NOW),視其就是該頂點的最短路.因為在當前U表中全部擴充套件的頂點中,NOW頂點是路徑最短的頂點,也就是說,其他當前全部可以到達的頂點中,只有大於或等於NOW頂點,如果 通過這些頂點再到達NOW頂點,勢必會比現在NOW頂點的路徑長,因為原來就大於等於NOW頂點了所以NOW頂點路徑長度就是源點到該頂點的最短路徑.但是如果存在負權邊,則會出現通過其他頂點到達NOW頂點的路徑長度小於當前
NOW頂點的路徑長度,這就是為什麼Dijkstra不能處理負權邊了(請讀者看下面例圖,模擬下Dijkstra的執行過程)