最短路徑dijkstra模板

2021-08-20 00:03:31 字數 1244 閱讀 3608

第一行兩個整數n m。n表示頂點個數(頂點編號為1~n),m表示邊的條數。接下來m行表示,每行有3個數x y z。表示頂點x到頂點y邊的權值為z。求源點為1的最短路徑。

題目**【坐在馬桶上看演算法】演算法7:dijkstra最短路演算法

這道題我只是想練練dijkstra模板,dijkstra主要由兩個步驟組成:

#include 

#include

using

namespace

std;

#define inf 0x3f3f3f3f

#define max 100

//edge[i][j]記錄i到j的邊長,dis[i]記錄到i的最短路徑長,

//mask[i]記錄i點是否加入集合,pre[i]記錄i的最短路徑上i的前乙個點

int edge[max][max],dis[max],mask[max],pre[max];

int main()

else }}

//輸入邊長

int a,b,w;

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

//源點為1,所以看1周圍的點(沒有和1相鄰的點距離會是inf)

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

mask[1]=1;//1為源點,讓1被訪問過

//dijkstra核心操作如下

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

}//u加入集合

mask[u]=1;

//根據u去更新其他點到源點的距離,因為可能經過u中轉之後有的點和源點會更近(所以遍歷所有點)

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

//輸出最短路徑長度結果

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

cout

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

cout

<<"1"

0;}

輸入:

6 9

1 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

1 2-1

3-4-2-1

4-2-1

5-3-4-2-1

6-5-3-4-2-1

最短路徑之 Dijkstra模板

一 時間複雜度為o v v 的dijkstra const int max v 100 10 const int inf 1 30 int cost max v max v 權值 int d max v 頂點 出發最短距離 bool used max v 以使用過的圖 int v 頂點數 int e...

最短路 路徑還原(dijkstra,模板)

b.wzy的大冒險 出發咯qaq 單點時限 2.0 sec 記憶體限制 512 mb 第一行兩個數n,m 1 n 103,1 m 103 接下來m行,每行三個數x,y,z,表示點 x 與點 y 之間有一條權值為 z 的有向邊 1 x,y,z 103 第一行乙個整數表示 1 到 n 的最短距離 第二行...

Dijkstra 最短路徑

dijkstra 最短路徑 針對有向圖,不支援負權值 圖的相鄰矩陣表示方法,還要用到最小值堆 include include define unvisited 0 define visited 1 define infinite 9999 設定最大值 define n 5 定義圖的頂點數 using...