Dijkstra求最短路

2021-10-19 05:31:51 字數 1276 閱讀 7197

from acwing849

time limit:1s

memory limit:64mb

problem description

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

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

input

第一行包含整數n和m。

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

output

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

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

資料範圍

1≤n≤5001≤n≤500,

1≤m≤1051≤m≤105,

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

sample input

3 3

1 2 2

2 3 1

1 3 4

sample output
3
注意有向圖和重邊就可以了

#include

#include

using

namespace std;

int mp[

505]

[505

],dis[

505]

;//mp儲存地圖,dis是距離狀態

bool note[

505]

;//後續dij演算法檢視某個點是否已經被選取過

int n,m;

//點、邊

void

init()

for(

int i =

2;i <= n;

++i)

dis[i]

= mp[1]

[i];

dis[1]

=0;note[1]

=true;}

void

solve()

if(dis[n]

==0x3f3f3f3f

)printf

("-1");

else

printf

("%d"

,dis[n]);

}int

main()

Dijkstra求最短路

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

Dijkstra求最短路

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

Dijkstra求最短路

如果圖中存在負權邊,則不要使用 dijkstra 來求最短路。如果題目中表明所給的圖存在重邊與自環。在求最短路徑的問題中,如果自環邊權重是 正數,顯然它不會出現在最短路徑中。如果自環邊是 負數,則需要考慮出現在最短路中。如果是稠密圖,使用了鄰接矩陣來存邊,則因為求最短路,所以我們對於重邊,只需要儲存...