最短路徑 C語言實現

2021-10-05 20:27:57 字數 1356 閱讀 2042

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()

執行結果如下圖:

最短路徑之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放入集...