在无向图中找到具有负边的最小权重生成树

时间:2015-04-26 02:38:55

标签: algorithm graph kruskals-algorithm

graph

所以我需要解决这个图,我对如何解决它有一个大致的想法,但如果我做错了,请纠正我。

所以要找到MST,我需要在图上执行Kruskals算法

这是我对这个Kruskals算法的伪代码

秩(V,E) A = null; 每个v包含在V中 使不相交的集合(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.我做错了吗?

1 个答案:

答案 0 :(得分:1)

你没有做错任何事。无法保证MST保留节点之间的最短距离。例如:三个节点完整图ABC,边缘权重为3,2,2(对我的ascii艺术道歉):

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

最小生成树是C-A-B,但原始图中B和C之间的距离是3,而在MST 4中。