從起點開始,每次以最優解
\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...