849 Dijkstra求最短路 I

2021-09-29 16:33:46 字數 1096 閱讀 3868

給定乙個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

輸出樣例:

1.先把dist陣列置為inf,dist[1]=0;g[n][n]為inf

2輸入的時候處理一下自環和重環,g[i][j]=min(g[i][j],w[i][j]).(如果自環是正值的話)

3.雙層迴圈迭代,每次找乙個沒有遍歷過的dist[i]最小的點,然後用該點取更新其他點

4.如果最後dist[n]=inf,就證明沒有邊到0點,所以放回-1,否則放回dist[n]

#include

#include

#include

using

namespace std;

const

int maxn =

505;

int g[maxn]

[maxn]

;int dist[maxn]

;int n, m;

bool sta[maxn]

;int

dijkstra()

for(

int j =

1; j <= n; j++

) sta[t]

=true;}

if(dist[n]

==0x3f3f3f3f

)return-1

;return dist[n];}

intmain()

cout <<

dijkstra()

;return0;

}

acwing 849 Dijkstra求最短路

目錄演算法求解 堆優化演算法 參考文章 題目傳送門 給定乙個 n 個點 m 條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出 1 號點到 n 號點的最短距離,如果無法從 1 號點走到n 號點,則輸出 1。輸入格式 第一行包含整數 n 和 m。接下來 m 行每行包含三個整數 x,y,z...

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。輸出格式 輸出乙個整數,表示...