Dijkstra演算法求解單源最短路徑

2021-07-02 20:50:28 字數 1088 閱讀 6644

dijkstra演算法

– 給定連通圖

v,將其分為兩部分s,

t=v-s,

引入陣列

d[n],

其中d[i]

表示從源點頂點

i的最短距離。 –

1. 將源點v0

加入到s

中,並更新陣列d

– 2.

在陣列d

中找到最小值

d[u]

對應的頂點u,將

u從t中移到s中

–3. 通過u

作為中間點,比較d[i

]與d[u]+(邊ui

的權值)

,更新d[i]

–4.

重複以上操作2、

3,直至

s=v,即

s包含所有頂點

#include

#include

using namespace std;

const int max_cost = 10000000;

const int max_num = 100;

int cost[max_num][max_num];

int d[max_num]; /* 儲存源點到其餘各個頂點的最短路徑值 */

bool s[max_num]; /* 判斷是否已經存入點到集合中*/

void dijkstra(int v0, int n) /* v0: 源點cost: 鄰接矩陣n: 頂點個數 */

d[v0] = 0;

s[v0] = true;

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

}s[u] = true; /* 將最小值對應的u加入到頂點集s中*/

for (int j = 0; j < n; ++j) }}

}int main()

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

}dijkstra(0, n);

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

cout << d[i] << endl;

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