我正在尝试设计一种算法,其中给定一个连接的加权图 G = (V, E) 和 V 中的顶点 U 的子集,将构造一个最小生成树,使得 U 中的所有顶点都是叶子(其他顶点可能也可以是叶子),或者返回不存在这样的树(假)。
这就是我所得到的,适应 Prim 的算法(公平警告,它真的很糟糕;甚至不知道它是否有效/有效或使用什么数据结构,我会接受任何其他正确的算法):
Let x be an arbitrary node in G
Set S = {x}
While S != V:
Let (u,v) be the cheapest edge with u in S and v not in S
Add (u,v) to tree T if u is not in U, add v to S
If all u in U is in the tree T:
return T
Else:
return False
我也有一张我认为它会对我画的这张图做些什么的图片: 图片在这里
证明该算法是正确的也会让我高枕无忧。