最短路徑
- 網圖:
兩個
頂點之間經過的邊上權值之和最小的路徑;
迪杰斯特拉(Dijkstra)算法
- 按照路徑長度遞增的產生最短路徑;
- 不是一次性算出兩個定點之間的最短距離;
- 通過計算每個中間頂點的最短距離,最后推導出要求的頂點最短距離;

graph-matrix

graph-Dijkstra_code1

graph-Dijkstra_code2
- 5~12行是初始化階段,final一維數組值均為0,D數組記錄所有頂點到v0的最短路徑值,當前是{65535,1,5,65535,65535,65535,65535,65535,65535},p數組全為0,表示目前還沒有找到任意一個頂點的最短路徑
- 13行是一個主循環,每循環一次求得v0與一個頂點的最短路徑,也就是讓一個頂點的final值為1
- 16~24行的循環,先令min為65535,通過w循環,與D[w]比較,找到目前最小的min和k值。當前是:D[1]的值最小,因為在第一次初始化的時候,v0連接的就兩條邊,v1和v2,如果是第二次循環,那就是D[2]
- 25~32行,是在修正之前已經判定的v0和某個點的最短距離,例如:在初始化的時候v0到v2的最短距離是5,但是第一次循環完成之后,發現v0->v1=min=1,v1->v2=3,因此v0->v1->v2=min+G.matirx[v1][v2]=4,這個值是小于D[2]=5的