NOTE - dijstra算法的正確性非常依賴于邊權值的非負。
原因是: 設V為所有點集, S為確定最短路徑的點集,算法每次取V-S中與源點距離最小的點來松弛其他邊,并將該點其加入S中.
反證法 + 歸納法
初始時,只有一個源點位于S中,加入S的為與源點直接距離最短的點k,并以k來松弛其他邊。假設k'為松弛后與源點距離最小的點,則k'此時可以加入S,即此時k'與源點的距離為最短路徑的長度,設其為d'。
假設d'非最短路徑長度,即存在一個更短的路徑.
思考d'如何得來的,其是通過源點 --- k --- k'
得到。已知與源點直接相鄰的點中k為最近點,并且邊的權值為非負,因此不存在通過其他直接相鄰的點t的更短路徑.
以上思路可以寫成更嚴格的歸納法.