Dijkstra最短路徑演算法實現

2021-10-14 07:25:37 字數 1073 閱讀 9266

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

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

輸入格式

第一行包含整數n和m。

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

輸出格式

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

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

資料範圍

1≤n,m≤1.5×105,

圖中涉及邊長均不小於0,且不超過10000。

輸入樣例:

3 31 2 2

2 3 1

1 3 4

輸出樣例:

3

#include

#include

#include

#include

using

namespace std;

const

int n=

3e5+10;

typedef pair<

int,

int> pii;

int ver[n]

,head[n]

,edge[n]

,ne[n]

, idx;

bool st[n]

;//1 -> n

int dist[n]

;int n,m;

int res;

void

add(

int a,

int b,

int _edge)

bool

dijkstra()

);while

(q.size()

));}

}}if(dist[n]

==0x3f3f3f3f

)return

false

; res = dist[n]

;return

true;}

intmain()

if(dijkstra()

)else

}

Dijkstra最短路徑演算法的java實現

迪傑斯特拉演算法是由荷蘭計算機科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉演算法。是從乙個頂點到其餘各頂點的最短路徑演算法,解決的是有向圖中最短路徑問題。迪傑斯特拉演算法主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。如下圖 令graph v,e 為乙個帶權無向圖。gr...

Dijkstra最短路徑演算法

基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...

Dijkstra最短路徑演算法

引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...