[英]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.