樸素Dijkstra演算法

2022-07-18 04:48:11 字數 1832 閱讀 3177

dijkstra演算法

dijkstra演算法算是貪心思想實現的,首先把起點到所有點的距離存下來找個最短的,然後鬆弛一次再找出最短的,所謂的鬆弛操作就是,遍歷一遍看通過剛剛找到的距離最短的點作為中轉站會不會更近,如果更近了就更新距離,這樣把所有的點找遍之後就存下了起點到其他所有點的最短距離。

問題引入:

指定乙個點(源點)到其餘各個頂點的最短路徑,也叫做「單源最短路徑」。例如求下圖中的1號頂點到2、3、4、5、6號頂點的最短路徑。

下面我們來模擬一下:

//鄰接矩陣是用列模擬每乙個點,每一行來表示每一列表示的點到每個點的距離2//

如果能走到則距離為具體數字若不能走到則為無窮大即0x3f3f3f3f 3//

樸素dijkstra演算法實質找到每個點到每個點的最短距離中的最小距離4//

並且更新d,更新1號點到其他點的距離 5//

再從這個最短距離的點去尋找其能尋找到的最短的距離

6 #include7 #include8 #include9

using

namespace

std;

10const

int n=505;11

intn,m;

12int q[n][n],d[n];//

q儲存稠密圖的鄰接矩陣d儲存1到每個點的最小距離

13bool st[n];//

標記每個數是否被找到最短距離

14int

dijkstra()

1525 st[t]=true;26

for(int j=1;j<=n;j++)

27 d[j]=min(d[j],d[t]+q[t][j]);//鬆弛操作

28//

此處為即為1->t->j 更新1到j的最短距離就用1到t的距離加上t到j的距離 29}

30if(d[n]!=0x3f3f3f3f) return

d[n];

31else

return -1

; 32}33

intmain()

3444 cout

45return0;

46 }

樸素版的dijkstra演算法

去你大爺的dijkstra演算法 沒忍住,學了好久終於解決了樸素版的dijkstra演算法 水題鏈結 最短路徑問題 include include include using namespace std int n,m const int n 510 int dis n 某點到n的距離 int g ...

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號...