1. 程式人生 > >圖 實驗七 采用Dijkstra算法求帶權有向圖的最短路徑

圖 實驗七 采用Dijkstra算法求帶權有向圖的最短路徑

圖解 初始 -s 由於 mic spa 初始化 mil dijkstra

Dijkstra算法圖解

技術分享圖片

說明:
初始化S = { 0 }, U = { 1, 2, 3, 4, 5, 6 }, dist[ ] = { 0, 4, 6, 6, ∞, ∞ }, path[ ] = { 0, 0, 0, 0, -1, -1, -1 }
第一步:從U中找到最小的頂點1,將它添加到S中,S ={ 0, 1 }, 考查頂點1, 發現頂點1到頂點2和4有邊:
dist[ 2 ] = MIN{dist[ 2 ], dist[ 1 ] +1 } = 5(修改)
dist[ 4 ] = MIN{dist[ 4 ], dist[ 1 ] +7 } = 11(修改)
則S ={ 0, 1 },dist[ ] = { 0, 4, 5

, 6, 11, ∞ },path[ ] = { 0, 0, 1, 0, 1, -1, -1 }.

第二步:從U中找到最小的頂點2,將它添加到S中,S ={ 0, 1,2 }, 考查頂點2, 發現頂點2到頂點4和5有邊:
dist[ 4 ] = MIN{dist[ 2 ], dist[ 2 ] +6 } = 11
dist[ 5 ] = MIN{dist[ 4 ], dist[ 2 ] +4 } = 9(修改)
則S ={ 0, 1,2 },dist[ ] = { 0, 4, 5, 6, 11, 9 },path[ ] = { 0, 0, 1, 0, 1, 2, -1 }.

第三步:從U中找到最小的頂點3

,將它添加到S中,S ={ 0, 1,2, 3 }, 考查頂點3, 發現頂點3到頂點2和5有邊, 由於頂點2已經考察過,不進行修改:
dist[ 5 ] = MIN{dist[ 5 ], dist[ 3 ] +5 } = 9
則S ={ 0, 1,2, 3},dist[ ] = { 0, 4, 5, 6, 9, ∞ },path[ ] = { 0, 0, 1, 0, 1, 2, -1 }.

第四步:從U中找到最小的頂點5,將它添加到S中,S ={ 0, 1,2, 3, 5 }, 考查頂點5, 發現頂點3到頂點4和6有邊:
dist[ 4 ] = MIN{dist[ 4 ], dist[ 5 ] +1 } = 10(修改)


dist[ 6 ] = MIN{dist[ 6 ], dist[ 5 ] +8 } = 11(修改)
則S ={ 0, 1,2, 3, 5},dist[ ] = { 0, 4, 5, 5, 9, ∞ },path[ ] = { 0, 0, 1, 0, 5, 2, 5 }.

圖 實驗七 采用Dijkstra算法求帶權有向圖的最短路徑