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