Dijkstra理解

  Dijkstra算法是一個用於計算單源最短路徑的算法,也即加權有向圖中,找出某一個節點到其餘各個節點的最短距離。算法

  一、在n個節點的有向圖中,假如要計算A節點到其餘全部節點的最短路徑,那麼咱們能夠找出A節點能直接到達且權最小的一個節點B,那麼該路徑即爲A節點到B節點的最短路語言

徑。緣由在於:若是A到B有更短的路徑,那麼A必定須要經過第三方的節點來到達B,好比A須要經過C節點,而後經過C節點到達B節點。顯然這裏是不存在這樣的路徑了,由於A通過

任何節點到達B節點的路徑長度都會大於A直接到達B節點的路徑長度(-_-上面都說過了,B節點是A節點能直接到達的最短路徑的節點)。

  二、上面咱們找到了A節點到B節點的最短路徑,接下來咱們繼續尋找A到剩餘節點的最短路徑。根據上面的思路,咱們能夠在剩餘節點中找出一個A能直接到達企且權最小節點D,A

到D的路徑是否是就是A到D的最短路徑你呢,顯然這裏是不肯定的,由於這裏A到D的最短路徑可能會通過B節點,既然這樣,那就乾脆將B也考慮進來好了,計算出A->B->D的路徑

的長度,而後與A->D的路徑長度進行比較,若是A-B->D確實小於A->D的路徑長度,那麼久A->B->D當作爲A->D的路徑長度,其餘從B能直接到達的節點也做一樣的處理。

  三、那麼咱們如今再從除B節點外找一個到節點最短路徑的節點E,A到E節點的路徑長度是否是A到E節點的最短路徑呢,答案是確定的,由於這裏再也找不出一個第三方節點能使A

到E節點更短了,理由同3。

            語言表達能力不行,本身都被本身說暈了!!!!!

相關文章
相關標籤/搜索