如圖,求v0到其他頂點的最短路徑及其長度,
廢話少說,用dijkstra演算法。我在《資料結構(c語言版)》裡面的**的基礎上寫了乙個直接儲存路徑的版本。看**,
#include#includeusing namespace std;
#define maxint 1000000
// src -- 為源節點
// g -- 有向圖的鄰接矩陣
// v -- v[j]是從src到j的最短路徑
// dist -- dist[k]為從src到k的最短路徑的長度
templatevector* djst(const int (&g)[m][m], int* dist, int src)
} dist[src] = 0; // src到本身的最短路徑就是自己,且長度為0
final[src] = true;
v[0].push_back(0);
for(int i = 1; i < m; ++i)
}final[nearest] = true; // 則從src到nearest的最短路徑已經找到
for(int k = 0; k < m; ++k)
}} return v;
}//列印出最短路徑
void printpath(vector* v, int len){
for(int i = 0; i < len; ++i){
cout<
cout
v = djst(g, dist, 0);
cout<
執行結果如圖,
搞定。《資料結構(c語言版)》(嚴蔚敏、吳偉民,清華大學出版社)
單源最短路徑問題
一 單源最短路徑問題 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中的乙個頂點,稱為源。現在要計算從源到所有其它各頂點的最短路長度,這裡路的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。每條邊上標註有字母和數字,在字母旁邊的數字為路長。演算法從優先佇列中取出具有最小當前路長的結點作為當前擴充套件...
單源最短路徑問題
單源最短路徑問題是這樣乙個問題 在圖中給定乙個起點,求起點到其它頂點的最短距離。dijkstra演算法是用來解決邊權非負的情況的。它的基本思想是設乙個陣列d n 用來代表起點到其它頂點的最短距離。初始的時候d start 為0,其它的d i 設為無窮。然後從起點開始遍歷整個圖,若存在頂點u,使得d ...