[Algo]最短路徑搜索

- 從有向帶權的圖中獲取某個源點到剩餘的其他節點的最短路徑的算法,權表示的是路徑長度。

- 維護一個長度數組v[n],n就是節點個數,每個數組都存儲源點到對應的節點的長度,一開始初始化的時候,由於都不知道,所以都初始化成無窮大,然後開始算法:

- 首先是源點到源點的,初始化成0。

- 然後看所有和源點相連的所有其他節點路徑,這些路徑是已知的了,發現比數組中當前的無窮大小,所以更新到數組中,即第一步是【更新】。

- 完成後,從v數組中選擇最小的路徑長度對應的節點,這個就是新選擇的節點,這個節點的路徑和對應的長度就確定了,可以做一個標誌,表示這個節點已找到最短路徑,即第二步是【貪婪尋找】。

- 由於新加入了一個新節點,又有與之相鄰的節點路徑是已知的了,可以再次嘗試更新,即重複再次運用【更新】這個步驟,更新完畢後,再次運用【尋找】如此反覆,直到所有的節點都標記成路徑已經找到了,從而找到了一顆最短路徑生成樹。(樹上的每一條唯一路徑,從源點到節點x,就是最短路徑。注意:這個方法在使用前需要先清除環路,這個對於小圖比較簡單,對於大型的圖,可能先要檢查並且清除環路,(環路的存在對於最短路徑計算沒有意義)會增加計算量。最短路徑是一定不可能經過環路的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章