求單源最短路徑的演算法是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 簡...