2012-10-29 152 views
1

所以我正在編寫Dijkstra算法的JavaScript實現。Dijkstra的算法實現

我讀過很多Wikipedia page,它幫助我將步驟轉化爲代碼。我也讀過this Stack Overflow question,這是我的問題的一部分。

從A,的唯一路徑是B,這給我們

O => AB = 12;

O => C = 7

C是現在最低距離,並且是新的當前節點

O => CD = 8

由於d是目的地和8 < 12,路由CD被選中。

您如何將此決定實現爲代碼?目前,我的腳本基於什麼節點來選擇哪個節點與當前節點相鄰,是否需要通過這種新的評估來運行每個決策?

順便說一下,here是我的(雜亂)代碼。

+0

你的代碼看起來有點亂,因爲你沒有對'currentEdge'和'currentNeighbor'使用局部變量。此外,你應該先找出哪一個('c1'或'c2')是鄰居節點,然後在其上應用條件而不是重複if語句。沒有看得更遠... – Bergi

回答

2

我的腳本基地選擇什麼節點上哪些是靠近當前

號你connectedNodes列表(按距離排序)應該是全球性的,不僅對當前節點。

然後,對於第一個(最小距離)節點,將所有未訪問的鄰居添加到列表中,仍按距離排序。標記當前訪問的節點並繼續下一個最短距離非訪問節點。

+0

現在該函數吐出一個數組13空間長的隨機節點:[PasteBin](http://pastebin.com/CAuBEmzv) – Polyov

+0

感謝您幫助我清理我的代碼,並讓它更多感覺,但這個答案仍然不能回答我如何實施這個決定的問題。我的腳本中沒有明確的指示符,表示存在一定的正確或最短路徑,算法查看哪些節點,然後確定最終距離。 – Polyov

+0

要獲取找到的路徑,您需要保存添加到列表中的每個節點的前驅。然後,您可以返回從最終節點到起始節點的路線 – Bergi