-給定乙個帶權有向圖g=(v,e),每條邊的權都是非負實數。給定v中乙個頂點v為源。計算從源到其他所有頂點的最短路長度。
-dijkstra演算法,貪心演算法。
-基本思想:
設定頂點集合s並不斷的做貪心選擇來擴充這個集合。
(把從源v到u且中間只經過s中頂點的路程為源v到u的特殊路徑)
-演算法描述:
輸入的有向圖是g=(v,e),v=。
頂點v是源。
power_of_edge[i][j] 表示邊(i,j)的權。若(i,j)不屬於e,則power_of_edge[i][j] = maxint
min_distance[i] 表示當前從源到頂點i的最短特殊路徑長度。
last_vertex[i] 記錄從源到i的最短特殊路徑上i的上乙個頂點。
-以下是我的**(看書的時候還是挺痛苦的因為書上用的都是u,v,c,n之類的,為了增強可讀性,我在自己手打時用了我認為比較好理解的名字):
1//dijkstra演算法2//
單源最短路徑問題
34 template
5void dijkstra(int num_of_vertexes, int v, type min_distance, int last_vertex, type **power_of_edge)
615 has_been_visited[v] = true
;16 min_distance[v] = 0;17
for (int i = 1; i < n; i++)
1828
}29 has_been_visited[vertex_will_be_visited_this_time] = true;30
for (int j = 1; j <= n; j++)
3139}40
}41}42 }
單源最短路徑問題
如圖,求v0到其他頂點的最短路徑及其長度,廢話少說,用dijkstra演算法。我在 資料結構 c語言版 裡面的 的基礎上寫了乙個直接儲存路徑的版本。看 include includeusing namespace std define maxint 1000000 src 為源節點 g 有向圖的鄰接...
單源最短路徑問題
一 單源最短路徑問題 1 求下列多級圖的單源最短路徑,寫出求解過程。根據cost i min可知 cost為 1 2 3 4 5 6 7 8 9 10 d為 1 2 34 5 6 78 9 10 p為 1 2 3 4 5 6 7 8 9 10 計算過程如下 初始 cost 1.n 0 cost 9 ...
單源最短路徑問題
給定帶權有向圖g v,e 其中每條邊的權是非負實數。給定v中的乙個頂點,稱為源。現在要計算從源到所有其它各頂點的最短路長度,這裡路的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。每條邊上標註有字母和數字,在字母旁邊的數字為路長。演算法從優先佇列中取出具有最小當前路長的結點作為當前擴充套件...