Dijkstra 單源最短路徑演算法

2021-05-22 20:23:38 字數 931 閱讀 2982

求單源最短路徑的演算法是dijkstra演算法。

它解決了有向圖g=(v, e)上帶權的單源最短路徑問題。但要求所有邊的權值非負。

dijkstra演算法中設定了一頂點集合s,從源點s到集合中的頂點的最終最短路徑的權值均已確定。演算法反覆選擇具有最短路徑估計的頂點u∈v-s,並將u加入到s中,對u的所有出邊進行鬆弛。在下面的 演算法實現中,用到了頂點的最小優先順序列隊q,排序關鍵字為頂點的d值。

下面是dijkstra的偽碼:

dijkstra(g, w, s)

1 initialize-single-source(g, s)

2 s←φ

3 q←v[g]

4 while q ≠ φ

5  do u ← extract-min(q)

6 s ← s∪

7 for each vertex v ∈ adj[u]

8 do relax(u, v, w)

problem description

input

輸入資料有多組,每組的第一行是三個整數t,s和d,表示有t條路,和草兒家相鄰的城市的有s個,草兒想去的地方有d個;

接著有t行,每行有三個整數a,b,time,表示a,b城市之間的車程是time小時;(1=<(a,b)<=1000;a,b 之間可能有多條路)

接著的第t+1行有s個數,表示和草兒家相連的城市;

接著的第t+2行有d個數,表示草兒想去地方。

output

輸出草兒能去某個喜歡的城市的最短時間。

sample input

6 2 3

1 3 5

1 4 7

2 8 12

3 8 4

4 9 12

9 10 2

1 28 9 10

sample output 9

**(hdu)

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra單源最短路徑

dijkstra單源最短路徑 給定乙個帶權有向圖g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。下面給出兩個計算單源最短路徑的模板。dijkstra 簡...