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

2021-08-08 10:46:19 字數 1288 閱讀 1637

# 單源最短路徑演算法 - dijkstra演算法

標籤(空格分隔): 演算法

這是乙個貪心演算法,每次新擴充套件乙個路程最短的點,更新與其相鄰的點的路程。

這個演算法可以解決單源最短路徑問題,這裡是從第乙個點開始到其他點的最短路徑。

不能有負權邊,因為擴充套件到負權邊的時候會產生更短的路程,有可能就破壞了已經更新的點路程不會改變的性質。

時間複雜度 o(n^2),使用鄰接表表示圖,絕大部分情況下能降低時間複雜度,具體看pdf,我也沒怎麼看懂。

/**

* 單源最短路徑演算法

* dijkstra演算法

* 時間複雜度 o(n^2)

* by jtahstu at 2017-09-18

*/#include #include using namespace std;

int main() , dis[11] = , book[11] = ;

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

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

if (i == j)

e[i][j] = 0;

else

e[i][j] = int_max;

int a, b, c;

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

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

book[1] = 1;

int min, u;

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

}book[u] = 1; //標記該點最短路徑值已經確定

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

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

cout << dis[i] << " ";

return0;}

/**6 8

1 2 1

1 3 2

2 3 3

2 4 3

2 5 1

3 4 5

4 6 2

5 6 1

0 1 2 4 2 3

6 91 2 1

1 3 12

2 3 9

2 4 3

3 5 5

4 3 4

4 5 13

4 6 15

5 6 4

0 1 8 4 13 17

*/

單源最短路徑演算法

簡單介紹 最短路徑演算法是圖演算法中的經典演算法,是用於解決圖中某個頂點到另外乙個頂點所經過路徑的花銷最小 這裡的花銷可能是時間也可能指費用等 dijkstra是用於解決單源最短路徑的經典演算法。圖的儲存方式 鄰接矩陣 在鄰接矩陣中,要獲取某個結點的出度和入讀,是通過掃瞄結點所在臨界矩陣中的行列完成...

單源最短路徑

include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...

單源最短路徑

最優子結構 最短路徑的子路徑也是最短路徑,動態規劃和貪心演算法的乙個重要指標。環路 一條最短路徑不可能包含環路 1 環路權重為負,如果有一條環路權重為負,則不存在最短路徑 2 環路權重為零,如果包含該環路,則將該環路去掉即可 3 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...