您描述的問題由Dijkstra algorithm解決。它主要負責最接近尚未訪問節點,並寫入到最接近的所有節點的距離吧:
1. start from the source node S
2. add all neighboring nodes into a list, ordered by their distance
and write down the current shortest distance to them
3. pick the closest node N
4. update the distances of all already visited nodes, if a shorter distance
is available to them through N
5. add remaining neighboring nodes into the list
6. eliminate N from the list and repeat from step 3.
這是必要的,您訪問節點從最近一到最遠的順序,那麼你不會錯過任何可能的最短路徑。
實現Dijkstra的挑戰是優先級前端的實現,該前端存儲節點,按距離源的距離排序。如果使用簡單列表,則還需要考慮將新節點輸入到數組中,因爲需要查找元素的正確位置。
因此,基本的Dijkstra有多種改進,例如使用Fibonacci heap作爲實現優先級隊列的結構。
是不是最短路徑算法(Dijkstra)從s到圖的所有節點? – berkay