Dijkstra求最短路(樸素做法與堆優化)

2021-10-25 04:27:45 字數 1087 閱讀 7913

dijkstra求最短路的基本思路是貪心演算法,求解單源最短路。

適用於求解正權邊。

演算法的基本原理可以自行檢視。

這裡講解兩種求最短路的方法:

(1)、樸素演算法

樸素演算法的時間複雜度為o(n2),適用於稠密圖,用鄰接矩陣來存圖,並且可以處理自環和重邊。

dijkstra求最短路 i

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

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

輸入格式

第一行包含整數n和m。

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

輸出格式

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

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

資料範圍

1≤n≤500      1≤n≤500,1≤m≤105     1≤m≤105,

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

輸入樣例:

3 3

1 2 2

2 3 1

1 3 4

輸出樣例:

3模板**:
#include#include#includeusing namespace std;

const int n=510;

int n,m;

int q[n][n];

int d[n];

bool f[n];

int dj()

if(d[n]==0x3f3f3f3f) return -1;

return d[n];

}int main()

); while(!q.empty())

{pii t=q.top();

q.pop();

int ver=t.second,dis=t.first;for(int i=0;i這裡用pair來存1到id距離和id,優先佇列預設以pair first從小到大排序。

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 求乙個源點到 除了這個點之外其他所有的點 的最短距離,不需要記錄每條路徑 這題一直困惑著我的是,為什麼一開始找的最小的最短距離就是確定的最短距離?想了好...

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

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