dijkstra演算法,單源最短路徑演算法,含記錄路徑

2021-07-29 02:01:45 字數 1991 閱讀 7896

v0為源點,n為鄰接矩陣的階,edge為鄰接矩陣,maxn為常量,path用來儲存路徑節點的前驅,d用來儲存最短路徑權重和。順便說一下,嚴蔚敏的資料結構中的這個演算法只能儲存最短路徑上的節點,並得不到先後順序。

//從某個點到其餘各點間的最小距離

void dijkstra(int v0, int n, int edge[maxn], int path, int d)

path[v0] = v0;

d[v0] = 0;

final[v0] = true; // final[i]為 true 時,表示i在集合s(已求得最短路徑的終點的集合)中

//開始主迴圈,每次求得v0到某個v頂點的最短路徑,並加v到s中

for (int i = 1; i < n; i++)

if (v == -1)

break;

final[v] = true;

for (int w = 0; w < n; w++) //更新當前最短路徑及距離

if (!final[w] && d[w] > min + edge[v][w]) // if

}// for

}//挑戰程式設計競賽中的這個演算法好像更短

下面用乙個陣列track倒序儲存v0到end點的最短路徑所經過的點,但是若路徑不唯一,這個演算法只能得到乙個解,在路徑最短的前提下,並不嫩保證得到經過節點最少的路徑

int gettrack(int v0, int end, int track, int path) 

track[cur - 1] = v0;

return cur; // 從0開始,track倒序儲存路徑,返回走過點數の個數cur

}

zzuwenjie 2017-3-19 22:54:49

**中這樣一句,d[w] = min(d[w], minv + d[v][w]);小心溢位,所以不直接相連的邊距離不能設定為int_max

void dijkstra(int v0, int n, int pic[maxn], int d) 

final[v0] = true;

d[v0] = 0;

for (int i = 1; i < n; ++i)

if (u == -1)

break;

final[u] = true;

for (int w = 1; w <= n; ++w)

d[w] = min(d[w], minv + pic[u][w]);

}}

鄭大oj10400海島爭霸

求最短路上的最大值

#include #include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

int n, m;

const int maxn = 112;

int pic[maxn][maxn];

int d[maxn];

bool final[maxn];

void dijkstra(int v0, int n, int pic[maxn], int d)

final[v0] = true;

for (int i = 1; i < n; ++i)

} if (u == -1)

break;

final[u] = true;

for(int w = 1; w <= n; ++w)

if (!final[w])

d[w] = min(d[w], max(d[u], pic[u][w])); }}

int main()

scanf("%d", &m);

while(m-- > 0) }

return 0;

}

單源最短路 Dijkstra演算法

前提 沒有負邊 如果有負邊,可以用此方法檢查是否有負圈 const max v max v 表示邊的權重值 d max v 儲存從起點到每個點的總權重值 bool used max v 表示當前點是否已經訪問完畢 思想 找到乙個已經確定最短距離的點,更新跟它相鄰的點,之後這個點就不用關心了。起點最短...

單源最短路演算法 Dijkstra

dijkstra演算法是單源最短路演算法,可以求解不帶負權邊的圖中,從源點s到其它所有點的最短路。時間複雜度近似o n 2 可以用堆優化。一般用鄰接表,也可用鄰接矩陣。在稠密圖上會有較好的效能表現。include include using namespace std int s,t,n,m,las...

單源最短路 Dijkstra演算法

本文 自王陸的文字,僅作學習使用。dijkstra 迪傑斯特拉 演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。問題描述 在無向圖 g v,e 中,假設每條邊 e i 的長度為 w i 找到由頂點 v0 到...