最短路徑Dijkstra演算法

2021-10-01 15:18:58 字數 3270 閱讀 1790

從起點開始,每次以最優解

\color

最優解的思想確認下乙個點

思 想誤

區:不是

簡單地每

次取最短

的!\color

思想誤區:不

是簡單地

每次取最

短的!而是要

在記錄的

基礎上取

最小的\color

而是要在記錄

的基礎上

取最小的

1.確認起點——a

2.確認第二個點——c

確認a後,出現了兩條可行的路——30 和 5

選5,則確認了c

3.確認第三個點——f

確認了 a , c 後有三條路可走——30 , 15 和12 (5+7)

這 裡便

出現了所

謂的——

記錄!\color

這裡便出現了

所謂的—

—記錄!

選12,則確認了f

4.確認第四個點——b

確認了a ,c,f 後有四條路可走

——30, 15, 22(5+7+10) 和 30(5+7+18)

選15,則確認了b

以此類推,則當確認到終點時就不用再進行下去了

1. 每當

乙個點確

認下來的

時候\color

1.每當乙個

點確認下

來的時候

從 起點

到它的最

短路徑也

就確定了

\color

從起點到它的

最短路徑

也就確定

了2.這個算

法的難點

就是所謂

的——記

錄!\color

2.這個演算法

的難點就

是所謂的

——記錄!也可

以叫這個

為——d

p動態規

劃\color

也可以叫這個

為——d

p動態規劃程式碼

思路:\color

**思路:每次根

據新加入

點,加上

已經記錄

了的路徑

來確認下

乙個點\color

每次根據新加

入點,加

上已經記

錄了的路

徑來確認

下乙個點

具 體一

些的程式碼

講解:(

完整程式碼

在最下面

)\color

具體一些的代

碼講解:

(完整代

碼在最下

面)首先圖的結構:

(鄰接矩陣表示乙個有向圖)

;a的下標——0,b的下標——1,c的下標——2

以此類推

使用乙個名為 visit 的陣列來標記已經確認了的點

用 ans 陣列記錄目

前\color

記錄目前

從起點到各點的最短路徑

每 次新

加入乙個

點會更新

\color

每次新加入一

個點會更新但是

已經確定

了的點就

不必更新

\color

但是已經確定

了的點就

不必更新

參數列的n ——點的個數

index ——表示新確認的點的下標

while 迴圈——一次確認乙個點

while 之前的是初始化,把起點給加進去

min_2col——標記新加入點後新增路線中的最短

for

(j=0

;j)}

上面這個迴圈是在新確認乙個點後更新當

前ans

陣列\color

更新當前an

s陣列是整個演算法最重要的部分

for

(j=0

;j)}

上面這個迴圈則是在更新陣列過後找最短的路徑,然後標記 visit 和為下次確認新點做準備

下面是完整**:

int

shortest

(char start,

char end,

int n)

//最短路徑

else

}int min_2col=index+1;

//新加入點能及最小的列

int min_i=index+1;

//dp最新的index

int min_v=j[index]

[index+1]

;//dp最新的值

while

(x(a+j[index]

[min_2col]

<

0)min_v=int_max;

else min_v=a+j[index]

[min_2col]

; min_i=min_2col;

//for

(j=0

;jans[min_i]

=min_v;

a=min_v;

index=min_i;

for(j=

0;jvisit[min_i]=1

; x++;if

(visit[end-

'a']

)return ans[end-

'a']

;//可以提前結束的

}int aa=ans[end-

'a']

;free

(ans)

;free

(visit)

;return ans[end-

'a']

;}

資料參考

資料結構:使用c語言/朱戰立編著-5版-北京:電子工業出版社,2014.1

Dijkstra最短路徑演算法

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

Dijkstra最短路徑演算法

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

最短路徑 Dijkstra演算法

最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...