dijkstra演算法求最短路

2021-09-05 10:34:45 字數 854 閱讀 2313

演算法思想:用乙個dis陣列記錄源點到其他各點的路徑,例如:如果v0是源點,那麼dis[1]就表示v0到v1的最短距離

用乙個vis陣列記錄頂點有沒有被當成出發點。如果第乙個出發點(源點)到別的點的路都已經走完了,那就找一下個目前距離源點最近的點作為出發點,標誌為1。然後繼續尋找最短路徑,如果dis[i]用乙個pre陣列記錄路徑。比如pre[5]=3就表示到v5的最短路徑的最後一段是從v3到達的,而怎樣到達v3的,在v3的路徑有儲存。

]核心**

while(1)

;void creat_graph(struct graphs* graph)

//初始化路徑長度為inf;

int x=0;

while(x!=graph->e) }

void dijkstra(struct graphs graph)

} if(mini==inf) break;

vis[u]=1;

for(int j=0;j} }

for(int i=0;iprintf("\n");

} }}int main()

//遍歷輸出圖

for(int i=0;i//初始化三個陣列

int x=inf;

vis[0]=1;//定v0為源點

for(int j=0;jif(graph.g[0][j]!=inf)

dijkstra(graph);

}/*6 8

0 5 100

0 4 30

0 2 10

1 2 5

3 2 50

3 5 10

4 3 20

4 5 60*/

Dijkstra演算法求最短路徑

參考文獻 dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用open,close表方式,drew為了和下面要介紹的 a 演算法和 d 演算法表述一致,這裡均採用open,close表的方式。大概過程 建立兩個表,open,close。open表儲存所有已生成而未考察的節點,...

Dijkstra演算法求最短路徑

dijkstra演算法用來求最短距離 已經實現了 那麼最短路徑 如何求解並列印出來呢?此處的方法是記錄路徑中結點的前驅 if v未被訪問 以u為中介點可以使起點s到頂點v的最短距離d v 更優 程式具體實現,鄰接矩陣版 n為頂點數,maxv為最大頂點數 int n,g maxv maxv 起點到達各...

Dijkstra演算法 求最短路徑

演算法概要 對於圖g v,e x y v 對於每個v in y,如果存在從點1到v的邊,則令 lambda v 為邊的長度 否則令 lambda v 為 infin 並設 lambda 1 為0 whiley neq 令y in y,使得 lambda y 最小 將y從y移到x 更新那些在y中與y相...