Dijkstra求單源最短路模板

2021-08-03 02:23:03 字數 2284 閱讀 4051

1

#include2

#include3

#include4

#include5

#include6

#define max 99999997

8usingnamespacestd; 9

//pair 的first 儲存的為最短距離, second儲存的為頂點編號 10

typedefpair<int,int>p;

//對組

1112

structnode 13

; 17node edge[

2003

];//

存所有的邊,因為是無向圖,所以*2 18

intcnt;

//結構體的下標 19

intn, s, t;

//n 點數,s 起點,t止點 20

inthead[

203];

//和鍊錶的頭指標陣列是一樣的。只不過此處head[u]記錄的為最後加入 edge 的且與u相連的邊在 edge 中的位置,即下標 21

22voidadd(intu,intv,intw)

//加邊操作 23

2930voiddijkstra() 31

54} 55

} 56

printf(

"%d\n"

,dis[t]==max?-

1:dis[t]);

//輸出結果 57

} 5859

intmain() 60

71scanf(

"%d %d"

,&s,&t);

//獲取起止點 72

dijkstra(); 73

} 74

return0;

75}題解在此

用到的資料結構

:前向星

對組優先佇列 1

//pair 的first 儲存的為最短距離, second儲存的為頂點編號 2

typedefpair<int,int>p;

//對組34

structnode

//前向星存邊 5

; 9node edge[

2003

];//

存所有的邊,因為是無向圖,所以*2 10

inthead[

203];

//和鍊錶的頭指標陣列是一樣的。只不過此處head[u]記錄的為最後加入 edge 的且與u相連的邊在 edge 中的位置,即下標 11

12priority_queuevector

,greater>que;

//優先佇列

從小到大

在此我們說一下前向星的加邊函式

1voidadd(intu,intv,intw)

//加邊操作 2

主函式對資料的獲取

1intmain() 2

13scanf(

"%d %d"

,&s,&t);

//獲取起止點 14

dijkstra(); 15

} 16

return0;

17}dijkstra演算法求值

1voiddijkstra() 2

25} 26

} 27

printf(

"%d\n"

,dis[t]==max?-

1:dis[t]);

//輸出結果 28

}

Dijkstra求單源最短路徑

思路 dijkstra求解帶權有向圖的單源最短路徑問題。與bellman ford演算法的區別是要求圖中沒有負的權值邊。在這種情況下dijkstra演算法通常有比較好的複雜度。特別是使用堆以後。演算法維護乙個點集s,該集合中的結點的最短路徑已經求出,演算法重複從結點集v s中選擇最短路徑估計最小的結...

Dijkstra求單源最短路徑

leetcode743 預定義 define mvnum 100 define imax 88888 無窮大 鄰接矩陣 typedef structmgraph 構造鄰接矩陣 int locatevex amgraph g,vertextype v return 1 int creategraph ...

Dijkstra演算法求單源最短路徑

與prim演算法樸素版實現起來差不多。樸素版dijkstra演算法 輸入乙個圖的矩陣,假定兩點不相鄰則權值為0 輸出每個頂點的最短路徑長度,可以列印指定頂點的路徑 dijkstra演算法跟prim演算法很像 相同的地方是 兩者都有乙個已經求得 mst 和已經求得 最短路 的集合 每納入乙個結點x到集...