我从考试中得到一个问题,我想知道我的方法是否适合这个问题。
Input: graph G(V,E),weight function f:E->R and edge e=(u,v).
output: algorithm that finds a minimum spanning tree with edge e in it.
我的解决方案是运行kruskal的算法,然后添加边e,如果它不存在,它应该做一个圆,因为树是n-1边,所以我们通过圆并删除最大的边(不是e)存在于那个圈子里。
是我的解决方案吗?怎么证明它是否存在,如果没有,你能告诉我为什么吗?
(P.S我有这个问题的解决方案,只想知道我的方法是否正确)
答案 0 :(得分:4)
或者可能是另一种方式,使用Prim
或Kruskal
的算法,但首先将edge e
添加到图表中(因为它必须在树中),然后通过使用常规算法步骤从优先级队列(例如,fibonacci heap
)弹出,继续以增加的权重值顺序添加边缘,算法本身将确保没有循环并且树跨越图形(然后您不需要额外的步骤来遍历循环并移除与e
不同的最大权重边缘。