Dijkstra 演算法 通過邊實現鬆弛

2021-07-27 17:52:31 字數 891 閱讀 2179

乙個點(源點) 到其餘哥哥頂點的最短路徑:單元最短路徑。

演算法步驟如下:

1。將所有的頂點分為兩部分:已知最短路程的頂點集合p和未知最短路徑的集合頂點集合q。最開始,已知最短路徑的頂點集合p只有源點乙個頂點,我們這裡可以用乙個book陣列來記錄哪些頂點在集合p中哪些頂點在集合q中。book[i]=1,表示在p中,=0在q中

2.設定源點s到自己的最短路徑為0,級dis[s] = 0.若存在有源電能直接到達的頂點,則把dis[i] 設為e[s][i],不能到達的,最短路徑設為無窮。

3.在集合q的所有頂點中選乙個離源點最近的頂點u加入到集合p中。並考察所有以點u為起點的邊,對每一條邊進行鬆弛操作,例如u到v的邊可以通過u->v鬆弛到s->v。路徑長度就可以用dis[u]+e[u][v]替代。如果這個值比已知的dis[v]小,就用新值替代舊值。

4.重複第3步,如果集合為空,演算法結束。

#include 

int main()

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

dos[i] = e[i][j];

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

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

dis[i] = e[1][i];

//book陣列初始化

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

book[1] = 1;

//dijkstra演算法核心語句

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

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

printf("%d",dis[i]);

getchar();

getchar();

return

0;}

**如上。終於明白了。

Dijkstra演算法 通過邊實現鬆弛

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

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

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號頂點到其餘各個頂點的初始路程 f...

dijkstra演算法實現

include include using namespace std const int maxnum 100 const int maxint 999999 各陣列都從下標1開始 int dist maxnum 表示當前點到源點的最短路徑長度 int prev maxnum 記錄當前點的前乙個結...