- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TheShortestPath(最短路径)
最短路徑
The Shortest Path
The Shortest Path(最短路徑)
由某節點到其他各個節點之最短路徑。
各個節點之間最短路徑。
最短路徑的定義 : 一條從節點S到節點D最短路徑P,它的總權重最少:
單一起點到其他節點最短路徑
採用貧婪(Greedy)策略
如圖是沒有負權重的網路設起點為0,求節點0到節點1 最短路徑
節點0到 1,路徑長原為50,經由節點2,路徑 0 - 2 - 1 ,路徑為45 ,然不滿足,繼續尋找得到路徑0 - 2 - 3 - 1 ,路徑長40為最短。
Dijkstra’s演算法則
要找出某一頂點到其他節點的最短路徑,可利用Dijkstra’s演算法求得。
其過程如下:
D = A [F, I] ( I =1, N )S = {F}V = {1, 2, … , N}D為N個位置的陣列,用來儲存某一頂點到其他頂點的最短距離,F表示由某一起始點開始,A [F, I]是表示F點到I點的距離,V是網路中所有頂點的集合,S也是頂點的集合。
從V-S集合中找一頂點t,使得D [t]是最小值,並將t放入S集合,一直到V-S是空集合為止。
根據下面的公式調整D陣列中的值:D [I] = min ( D [I], D [t] +A [t, I; ] ((I , t )?E)其中I是指t的相鄰各頂點。
繼續回到(2)執行。
演算法
=>圖解演算法
若Procedure SHORTEST_PATH (v, COST, DIST, n)
Declare S (1 : n )
for j ← 1 to n
S( j )← 0 ; DIST( j )←COST( v , j )
End
S( v )←1 ; DIST( v )←0 ; num←2
While num n do
Choose u : DIST(u) = min{DIST(w)}
S(u)←1 ; num←num+1
For all w with S(w) = 0 do
DIST(w) ←min {DIST(w), DIST(u) + COST(u , w ) }
end
end
end SHORTEST_PATH
=>演算虛擬碼
=>演算程式碼
同樣的,我們可以將Dijkstra演算法,以C語言表達如下:
#define N 6
#define MAX_I 10000
int adj_matrix [N][N]
int path [N], dist [N], s[N];
dijkstra ( int v)
{
int i , j , m , min , s[N] ;
for ( i = 0 ; i N ; i ++)
{
dist [i] = adj_matrix [v][i] ;
s [i] = 0 ;
path [i] = v ;
}
s [v] = 1 ;
for ( i = 0 ; i N – 2 ; i ++ )
min = MAX_I ;
for ( j = 0 ; j N ; j ++)
if ( dist [j] min s [j] = = 0)
{
min = dist [j] ;
m = j ;
}
s [m] = 1 ;
for ( j = 0 ; j N ; j ++)
{
if ( dist [j] dist [m] + adj_matrix [m][j])
{
dist [j] = dist [m] + adj_matrix [m][j] ;
path [j] = m ;
}
}
}
}
範例
Iteration
S
Vertex
Selected
DIST
Initial
1
2
3
4
5
6
5
5,6
5,6,7
5,6,7,4
5,6,7,4,8
5,6,7,4,8,3
5,6,7,4,8,3,2
-
6
7
4
8
3
2
∞
∞
∞
∞
3350
3350
∞
∞
∞
∞
∞
3250
∞
∞
∞
2450
2450
2450
1500
1250
1250
1250
1250
1250
0
0
0
0
0
0
250
250
250
250
250
250
∞
1150
1150
1150
1150
1150
∞
1650
1650
1650
1650
1650
各節點之最短路徑
前面所探討的是固定一點為起點,而其他節點為終點節點。
任何兩點之間的最短距離(All-pairs shortest paths),其公式如下:
Ak [i][j] = min { Ak-1 [i][j],Ak-1 [i][k]+Ak-1 [k][j] } , k≧1
A0 [i][j] = length [i][j]
其中k表示經過節點的名稱,
您可能关注的文档
最近下载
- 第十章正交试验设计.ppt VIP
- 鲁拜集(黄克孙郭沫若对照).pdf VIP
- (2025秋新版)青岛版三年级科学上册《5 .制作动物分类图册》PPT课件.pptx VIP
- 2025年(精品)成都七中学校自主招生考试试题 .pdf VIP
- 小学二年级新学期家长会班主任发言稿.docx VIP
- 现浇箱梁专项施工方案.doc VIP
- 北师大版数学二年级下册 长方形与正方形.ppt VIP
- QFSN-600-2型发电机铁心损坏分析 Analysis on Damage of QFSN-600-2 Generator Core.pdf VIP
- 小学二年级新学期家长会班主任发言稿.pdf VIP
- 小箱梁吊装履带吊安拆方案.docx VIP
文档评论(0)