簡體   English   中英

Dijkstra 算法是用於有向圖還是無向圖?

[英]Is Dijkstra's algorithm for directed or undirected graphs?

我一直試圖用谷歌搜索這個,但我發現的結果只會增加我的困惑。 似乎兩者都可以使用? 如果是這樣,默認情況下它是為哪些設計的,需要進行哪些更改以使其以非默認方式工作(無論是定向還是非定向)?

編輯:作為參考,上學期我遇到了一個問題,我得到了這樣的列表(機場):

AER,KZN,1.8835
ASF,KZN,1.3005
ASF,MRV,1.1204
CEK,KZN,1.9263
CEK,OVB,1.6733
DME,KZN,1.7892
DME,NBC,2.2319
DME,UUA,2.3786
EGO,KGD,1.4649
EGO,KZN,1.2603
GYD,NBC,2.0755

有人告訴我它是定向的,並要求我找到最短路徑。 我把它放到我在 Github 上找到的 Dijkstra 算法中(它是一個開放計算機中期,所以我們幾乎沒有足夠的時間從頭開始編寫算法),我的教授說它返回的最短路徑是不正確的,它是甚至沒有可能的路徑,因為該列表應該是定向的。 我不確定我是否應該修改算法或列表以進行此更正。 結果是它返回的第二條最短路徑實際上是有向最短路徑,但我仍然想知道問題是什么。

它可以應用於兩者。 原因如下:

無向圖是基本相同與連接的節點之間的雙向連接(=在相反方向上的兩個連接)的有圖。

所以你真的不需要做任何事情來使它適用於無向圖。 您只需要知道可以通過例如鄰接表從每個給定節點到達的所有節點。

Djikstras 算法通常用於加權圖。 也許您將它與廣度優先搜索 (BFS) 算法混淆,該算法本質上是用於未加權圖的 Djikstras。 區別(在 Djikstras 和 BFS 之間),當您處理加權路徑時,我們現在必須考慮路徑成本調整(權重)以及在當前之后訪問哪些節點的決定。

您可以在有向和無向圖中使用 Dijkstra 算法,因為當您有一條從鄰接列表前往的邊時,您只需將節點添加到 PriorityQueue 中。 例如,如果我的一個節點有一條從 A 到 B 的權重為 3 的邊,那么如果它是從 BI 引導的,則將無法將該邊添加回 A,而從 AI 可以將其添加到 B。

像其他答案一樣,請確保不要將其與權重混淆。 Dijkstra 的算法在正加權圖上運行,否則優先級隊列將毫無用處。

在您的示例中,Dijkstra 的算法會起作用,因為該圖既加權(正)又具有有向邊。

錯誤可能是邊以無向圖的形式進行了雙重分配。 將開頭的邊解析為對象時應小心,不要復制鄰接列表中的邊。

有向圖僅意味着連接頂點的邊能夠以一種方式連接,但不能以另一種方式連接。 這意味着一個頂點可以與另一個相鄰,但另一個頂點可能不與第一個頂點相鄰。

在 Dijkstra 算法的上下文中,圖是有向圖還是無向圖並不重要。 Dijkstra 算法簡單地引用頂點的相鄰頂點。 如果要將圖從有向更改為無向,則必須修改此鄰接列表。

是的 Dijkstra 適用於有向圖和無向圖,但所有邊權重都應該是我 +ve 。 因為如果有任何權重是 -ve 那么它可能無法給出正確的答案。 它適用於無向圖,因為在 Dijkstra 中我們應該總是看到最小邊 wt。 從它的源頂點

Dijkstra 可以用於循環圖。 這意味着它可以用於無向圖。 因為圖中的無向邊可以簡單地假設為雙向邊。 A to B. and B to A. Dijkstra 的作品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM