簡體   English   中英

在有負邊的無向圖中找到最小權重生成樹

[英]Find a minimum weight spanning tree in the undirected graph where there are negative edges

圖形

所以我需要解決這個圖,我對如何解決這個問題有一個總體思路,但是如果我做錯了,請糾正我。

因此,要找到MST,我需要在圖形上執行Kruskals算法

這是我的這個Kruskals算法的偽代碼

Kruskal(V,E)A =空; 對於V中包含的每個v使得不相交set(v)對於E中包含的每個v1,v2,按權重對E進行遞增排序,如果

Kruskal(V,E)

A = null; for each v contains in V make disjoint set(v) Sort E by weight increasingly for each(v1, v2) contains in E if Find(v1) is not equal to Find(v2) A = A Union {(v1,v2)} Union(v1,v2) Return A

因此,我要做的第一件事就是找到距離最短的節點,對嗎?

1)

我假設S到H的距離最短,因為d(h,s)= -3

所以A = {(h,s)}

所以現在我們遵循這種模式

2)A = {((h,s),(s,f)}

3)A = {((h,s),(s,f)(s,n)}

4)A = {((h,s)(s,f)(s,n)(f,k)}

5)A = {((h,s)(s,f)(s,n)(f,k)(s,m)}(由於從h到n的路徑已經通過,所以我們將H跳過到N s)

6)A = {((h,s)(s,f)(s,n)(f,k)(s,m)(d,b)}

7)A = {((h,s)(s,f)(s,n)(f,k)(s,m)(d,b)(b,m)}

所以現在既然有一條連接所有邊緣的路徑,那么我們很好嗎?

但我不明白的是,存在距離[u,v]比通過多個頂點的路徑[u,v]短。 例如,d [d,m]短於p [d,m],后者先經過B。 難道我做錯了什么?

你沒做錯什么 不能保證MST保留節點之間的最短距離。 例如:邊緣權重為3、2、2的三節點完整圖ABC(為我的ASCII藝術道歉):

A --- 2 --- B
|           |
2          /
|         /
C----3---/ 

最小生成樹是CAB,但原始圖中B和C之間的距離是3,MST中是4。

暫無
暫無

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

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