2013-02-12 33 views
1

說我有如下圖:Dijkstra算法會進入死衚衕嗎?

  e (destination) 
      | 
      | (1) 
      | 
      d 
      | 
      | (100) 
      | 
    (start) a - - - b - - - c 
      (1)  (1) 

將Dijkstra算法運行鑽牛角尖?我想如果我從a開始,它會變成a-> b-> c並進入死衚衕,因此無法達到e。是這樣嗎?

+0

你有兩個'c'在那裏 - 這是沒有意義的。 – us2012 2013-02-12 04:10:02

回答

4

顯然不是。從wikipedia description of Dijkstra's algorithm

.3。對於當前節點,考慮所有未訪問的鄰居並計算它們的暫定距離。

這意味着,如果你開始在abd都檢查(即他們的暫行距離計算),因爲它們未訪問過的鄰居。由於b具有較小的暫定距離,因此您可以訪問下一個。

如需更新,請使用附加節點e:如上所述,您的抵達地址爲c。但是你沒有被卡住 - 仍然有一個未預先確定的暫時距離的未訪問節點,即d - 所以你接下來訪問那個節點。

+0

爲什麼?從a開始,你會決定去b,然後c。在c,所有鄰居都被訪問。 – JASON 2013-02-12 04:18:46

+1

不可以。正如我所說的,從'a'開始,您立即檢查'b'和'd'。只有在那之後你才決定'去b'。我不知道還有什麼可說的,但「再次閱讀算法的描述」。 – us2012 2013-02-12 04:21:01

+0

我想我明白這個描述。你做?如果序列不是a-> b-> c,它是什麼? – JASON 2013-02-12 04:23:19