Dijkstra求最短路 I(樸素演算法)

2021-10-22 10:32:54 字數 1137 閱讀 9854

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。

請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出-1。

輸入格式

第一行包含整數n和m。

接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。

輸出格式

輸出乙個整數,表示1號點到n號點的最短距離。

如果路徑不存在,則輸出-1。

資料範圍

1≤n≤500,

1≤m≤105,

圖中涉及邊長均不超過10000。

輸入樣例:

3 31 2 2

2 3 1

1 3 4

輸出樣例:

3本題資料範圍:1≤n≤500,1≤m≤10^5 m > n^2 稠密圖,因此用鄰接矩陣更為合適

#include using namespace std;

typedef long long ll;

typedef pairpii;

const int mod = 998244353;

const int n = 1e3;

int dx = , dy = ;

int n, m;

// 1≤n≤500,1≤m≤10^5 m>n^2 稠密圖用鄰接矩陣

int g[n][n];//儲存邊的資訊.

int d[n]; //儲存各點到1號的的最小距離

int st[n]; //將已經確定最短距離的點存入

void dijkstra()

}st[t] = 1; //將t存入st陣列中

首先將d[1]賦值為0,內迴圈確定乙個最短點1號,之後用t=1,更新與其相鄰的兩個點的距離,d[2]=2,d[3]=4.第二次迴圈,確定2號為最短點,存入st中,之後用t=2,更新3號節點,c此時d[3]由4變為3,結束。

Dijkstra求最短路(樸素and堆優化)

題目來自acwing 題目描述 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示點x和點y之間存在一條有向邊,邊長為z。輸出格式...

Dijkstra演算法求最短路 樸素版

圖論中求最短路的演算法有很多,這裡使用一道模板題來介紹可以求單源最短路的dijkstra演算法 acwing 849.dijkstra求最短路 i 求乙個源點到 除了這個點之外其他所有的點 的最短距離,不需要記錄每條路徑 這題一直困惑著我的是,為什麼一開始找的最小的最短距離就是確定的最短距離?想了好...

849 Dijkstra求最短路 I

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 輸出乙個整數,表示1號點到n號...