dijkstra演算法 單源最短路徑

2021-10-04 05:39:44 字數 620 閱讀 5040

對於這個演算法我用的是堆優化,其實到頭來我還是為了投機取巧就看了這個堆優化的演算法,這個演算法是我好久之前看的了,現在又寫是為了鞏固一遍,這個迪傑斯特拉演算法不能解決有負邊的路徑,對了還有個演算法跟這個很像(普利姆演算法),到時也會寫出來。

#include#include#include#include#includeusing namespace std;

const int maxn = 1e4 + 1;

const int inf = 0x3f3f3f3f; // 用來初始化每條邊

int n, m; // n是頂點的個數, m 是邊的個數

struct edge;

vector g[maxn]; //用來建立邊表

typedef pair p; // 第一位用來存最短距離,第二位用來存頂點

int d[maxn];

void dijkstra(int s)

}

} }int main()

dijkstra(1);

printf("%d\n", d[n]);

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 到...