6 2Dijkstra演算法 通過邊實現鬆弛

2021-07-28 12:23:20 字數 1163 閱讀 4279

#includeusing namespace std;

int main()

else

e[i][j]=inf;

} }

//讀入邊

cout<<"請依次輸入m條邊,每條邊起點為b1,終點為b2,權重為z3。即b1->b2(z3):"<>b1>>b2>>z3;

e[b1][b2]=z3; }

//初始化dis陣列,這裡是1號頂點到其餘各個頂點的初始路程

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

//book陣列初始化

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

book[1]=1;//頂點1被標記

//dijkstra演算法核心語句

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

}} }

//輸出最終結果

cout<>n>>m;

//初始化first陣列下標1~n的值為-1,表示1~n頂點暫時都沒有邊

//first陣列表示各個頂點的第一條邊的編號(重點就是它只是乙個編號)

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

cout<<"請依次輸入m條邊,每條邊起點為u,終點為v,權重為w。即u->v(w):"<>u[i]>>v[i]>>w[i];

//u[i]是指第i條邊的起始頂點u;

//v[i]是指第i條邊的終止頂點v;

//w[i]是指第i條邊的路徑長度w;

//下面兩句是建立鄰接表的關鍵——>核心就是給讀入的每條邊依次進行1~m的編號,為每個頂點插入邊的時候都是直接插入"鍊錶"的首部

//所以遍歷某個頂點的所有邊時,遍歷順序正好和讀入順序相反

next[i]=first[u[i]];

first[u[i]]=i; }

/* 這裡是通過陣列來實現鄰接表,而沒有使用真正的指標鍊錶,這是一種在實際應用中非常容易實現的方法。這種方法為每個頂點i

(i從1~n)都設定了乙個鍊錶,裡面儲存了從頂點i出發的所有邊(用first陣列和next陣列實現)

*//*

//遍歷1號結點的每條邊

k=first[1];

while(k!=-1)

//遍歷每個結點的所有邊

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

} */

//*/

Dijkstra 演算法 通過邊實現鬆弛

乙個點 源點 到其餘哥哥頂點的最短路徑 單元最短路徑。演算法步驟如下 1。將所有的頂點分為兩部分 已知最短路程的頂點集合p和未知最短路徑的集合頂點集合q。最開始,已知最短路徑的頂點集合p只有源點乙個頂點,我們這裡可以用乙個book陣列來記錄哪些頂點在集合p中哪些頂點在集合q中。book i 1,表示...

Dijkstra演算法 通過邊實現鬆弛

演算法思想 每次找到離源點最近的頂點,然後以該頂點為中心進行擴充套件,最終得到源點到其餘所有點的最短路徑.時間複雜度是o n 2 基本步驟 將所有的頂點分為兩部分,已知最短路程的頂點集合s和未知最短路徑的頂點集合v.最開始,已知最短路徑在集合s中只有源點乙個頂點,用book陣列來標記哪些點在集合s中...

Dijkstra最短路徑演算法的java實現

迪傑斯特拉演算法是由荷蘭計算機科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉演算法。是從乙個頂點到其餘各頂點的最短路徑演算法,解決的是有向圖中最短路徑問題。迪傑斯特拉演算法主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。如下圖 令graph v,e 為乙個帶權無向圖。gr...