Dijkstra(迪傑斯特拉)演算法

2021-09-26 23:38:58 字數 1274 閱讀 5744

迪傑斯特拉(dijkstra)演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。

它的主要特點是以起始點為中心向外層層擴充套件(廣度優先搜尋思想),直到擴充套件到終點為止。

指定乙個節點,例如我們要計算 『a』 到其他節點的最短路徑

引入兩個集合(s、u),s集合包含已求出的最短路徑的點(以及相應的最短長度),u集合包含未求出最短路徑的點(以及a到該點的路徑,注意

如上圖所示,a->c由於沒有直接相連 初始時為∞)

初始化兩個集合,s集合初始時 只有當前要計算的節點,a->a = 0, u集合初始時為 a->b = 4, a->c = ∞, a->d

= 2, a->e = ∞,敲黑板!!!接下來要進行核心兩步驟了

從u集合中找出路徑最短的點,加入s集合,例如 a->d = 2

更新u集合路徑,if ( 『d 到 b,c,e 的距離』 + 『ad 距離』 < 『a 到 b,c,e 的距離』 ) 則更新u

迴圈執行 4、5 兩步驟,直至遍歷結束,得到a 到其他節點的最短路徑

1.選定a節點並初始化,如上述步驟3所示

2.執行上述 4、5兩步驟,找出u集合中路徑最短的節點d 加入s集合,並根據條件 if ( 『d 到 b,c,e 的距離』 + 『ad 距離』 < 『a 到 b,c,e 的距離』 ) 來更新u集合

3.這時候 a->b, a->c 都為3,沒關係。其實這時候他倆都是最短距離,如果從演算法邏輯來講的話,會先取到b點。而這個時候 if 條件變成了 if ( 『b 到 c,e 的距離』 + 『ab 距離』 < 『a 到 c,e 的距離』 ) ,如圖所示這時候a->b距離 其實為 a->d->b

4.思路就是這樣,往後就是大同小異了

5.演算法結束

dijkstra迪傑斯特拉演算法

注意 1.標頭檔案climits的int max,加上2整數會溢位,每次相加前得判斷被加值是否為int max,int max 10為負數 2.得先初始化再對d s c s g,cost等賦值 fill d 0 d 0 max,int max fill g 0 0 g 0 0 max max,int...

迪傑斯特拉 Dijkstra 演算法

迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。通過dijkstra計算圖g中的最短路徑時,需要指定起點s 即從頂點s開始計算 dijkstra演算法算是貪心思想實...

Dijkstra迪傑斯特拉演算法

作用 用於對有權圖進行搜尋,找出圖中兩點的最短距離 或一點到其他所有點的最短距離 ps 這一大段我看著也費勁 演算法思想 設g v,e 是乙個帶權有向圖,把圖中頂點集合v分成兩組,第一組為已求出最短路徑的頂點集合 用s表示,初始時s中只有乙個源點,以後每求得一條最短路徑 就將加入到集合s中,直到全部...