Dijkstra求最短路

2021-10-18 19:38:02 字數 1385 閱讀 2329

1.通過dijkstra計算圖g中的最短路徑時,需要指定起點s(即從頂點s開始計算)。

2.此外,引進兩個集合s和u。s的作用是記錄已求出最短路徑的頂點(以及相應的最短路徑長度),而u則是記錄還未求出最短路徑的頂點(以及該頂點到起點s的距離)。

3.初始時,s中只有起點s;u中是除s之外的頂點,並且u中頂點的路徑是」起點s到該頂點的路徑」。然後,從u中找出路徑最短的頂點,並將其加入到s中;接著,更新u中的頂點和頂點對應的路徑。 然後,再從u中找出路徑最短的頂點,並將其加入到s中;接著,更新u中的頂點和頂點對應的路徑。 … 重複該操作,直到遍歷完所有頂點。

#include

#include

#include

using

namespace std;

const

int n =

510;

int n, m;

int g[n]

[n];

int dist[n]

;bool st[n]

;int

dijkstra()

if(dist[n]

==0x3f3f3f3f

)return-1

;return dist[n];}

intmain()

printf

("%d\n"

,dijkstra()

);return0;

}

#include

#include

#include

#include

using

namespace std;

typedef pair<

int,

int> pii;

const

int n =

1e6+10;

int n, m;

int h[n]

, w[n]

, e[n]

, ne[n]

, idx;

int dist[n]

;bool st[n]

;void

add(

int a,

int b,

int c)

intdijkstra()

);while

(heap.

size()

));}

}}if(dist[n]

==0x3f3f3f3f

)return-1

;return dist[n];}

intmain()

cout <<

dijkstra()

<< endl;

return0;

}

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