最短路徑—Dijkstra備忘

來源:互聯網
上載者:User

參考:

http://2728green-rock.blog.163.com/blog/static/43636790200901211848284/

http://hi.baidu.com/chin/blog/item/93aed933e6772443ad4b5f88.html

描述:

Dijkstra演算法思想為:設G=(V,E)是一個帶權有向圖,把圖中頂點集合V分成兩組,第一組為已求出最短路徑的頂點集合(用S表示,初始時S中只有一個源點,以後每求得一條最短路徑 , 就將 加入到集合S中,直到全部頂點都加入到S中,演算法就結束了),第二組為其餘未確定最短路徑的頂點集合(用U表示),按最短路徑長度的遞增次序依次把第二組的頂點加入S中。在加入的過程中,總保持從源點v到S中各頂點的最短路徑長度不大於從源點v到U中任何頂點的最短路徑長度。此外,每個頂點對應一個距離,S中的頂點的距離就是從v到此頂點的最短路徑長度,U中的頂點的距離,是從v到此頂點只包括S中的頂點為中間頂點的當前最短路徑長度。

 

說明:

V表示點集合,E表示邊集合,圖G=(V,E)表示圖是由點集合與點之間的連線組成,如V={a,b,c,d}表示圖G有a,b,c,d四個點,E={(a,b),(a,c),(c,d),(b,d)},表示圖有a-b,a-c等邊,一般<a,b>這樣的角括弧表示有向邊,(a,b) 這樣的圓括弧表示無向邊。

 

有點集合V={a,b,c,d,e,f}

S表示已計算出最短路徑(假設a為源點)的頂點集合 ,U表示除S中點以外的點的集合,U中每個點ui都對應著一個距離值a--ui(存在a到ui的邊),a--ui這個距離值可取無窮大(兩點沒有直接連線),或是經過S中的某一個或多個點a--si--ui的距離值。

1.S中第一個加入的點是a,加入a後a-a的距離是零,滿足S中的點必需是計算出最短路徑的要求.

2.接著在U中選擇最短的a-ui,假設ui是d,將d加入集合S,此時S={a,d},然後嘗試使用a-d-ui調整U={c,d,e,f}中每個點a--ui的距離(如果通過新加的d點使a--ui距離變短).

3.重複步驟2,直到U集合中沒有點,演算法結束S中將是a到任意點的最短距離。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.