dijkstra演算法具體步驟:
(1)初始時,s集合只包含源點(s=),u集合包含剩餘的點,源點v到自己的距離為0,到其他頂點的距離均為無窮大(表示不可達),以此更新dist陣列,除dist[v]=0之外,其餘全為無窮大;
(2)在dist陣列中,找到目前在u集合中且使得源點v到其距離最小的頂點k,將該頂點加入u集合,並作為新的源點;
(3)根據新源點k,更新該源點到其他頂點的最小距離min,若距離被更新,對應的path陣列也相應改變;
(4)不斷重複步驟(2)、(3),直到所有頂點都在集合s中。
解釋:
s集合 已經確定了到源點最小距離的頂點所在的集合
u集合 未確定最小距離的頂點所在的集合
dist陣列 每乙個點到源點的實時最小距離
path陣列 每乙個頂點的前驅頂點,初始為-1
a陣列 以鄰接矩陣的形式儲存圖
//定義一些全域性變數
#define m 5201314
int a[7]
[7]=
,,,,
,,};
int dist[7]
,path[7]
,mark[7]
=;
//初始化陣列模組
void
initial()
}
//尋找dist陣列中距離最小的且在u中的頂點
intmin()
//不斷地更新迭代模組
void
update
(int start,
int last)}}
k=min();
number++
; mark[k]=1;}}
//控制格式化輸出
void
output
(int start,
int last)
printf
("路徑為:");
for(i=n-
1;i>=
0;i--
)}
//主函式進行總體呼叫
intmain()
執行結果如下圖:![](https://pic.w3help.cc/7ba/a2a6275bd86fdcab25e532db77e12.jpeg)
最短路徑之Dijkstra演算法 C語言實現
dijkstra演算法 單源點路徑演算法,要求 圖中不存在負權值邊 步驟 a.初始時,s只包含源點,即s v的距離為0。u包含除v外的其他頂點,即 u 若v與u中頂點u有邊,則u的距離設定為相應的權值,若u v之間不存在邊,則 設定u的距離為無窮大。b.從u中選取乙個距離 v 最小的頂點k,把k,加...
動態規劃之最短路徑C語言實現
printf 最短距離 d 012 p min dist printf 途徑地點個數 d 012 p num path printf 所經路徑 for i 0 inum path i printf d t p p path i printf 012 free p p path free p retu...
Dantjig演算法求最短路徑的c語言實現
圖的頂點從0到 7編號,邊的權值也已經標記,目標是運用 dantjig 演算法求出圖中所有點到點 0的最短距離。圖如下 程式執行結果正常,截圖如下 以下為完整的原始碼及注釋 include main g i i 1 表示點i 屬於集合a g i i 0 表示點i 不屬於集合a 初始化時將點 0放入集...