问题描述
我正在实施 Prim 的最小生成树算法。这是天真的实现(O(mn) 运行时间),但我卡住了,因为经过一些迭代(并不总是相同,因为源顶点是随机选择的)它没有找到任何交叉边(=具有端点的边X(我们见过的顶点)和 VX(我们没见过的顶点))。 代码:
from random import randint
class MST():
def __init__(self,edges,m):
self.m = m # no. of vertices
self.X = set([randint(1,m)]) # vertices we've seen(starting with source vertex)
self.mst = [] # vertices spanned by tree so far
self.compute_mst(edges)
def compute_mst(self,edges):
it = 0
while len(self.X) < self.m:
it += 1
cheapest_edge = tuple([None,None,float("inf")])
for edge in edges:
if edge[0] in self.X and edge[1] not in self.X and edge[2] < cheapest_edge[2]:
cheapest_edge = edge
if cheapest_edge[2] == float("inf"):
raise ValueError(f"No crossing edges,iteration: {it}")
self.mst.append(cheapest_edge)
self.X.add(cheapest_edge[1])
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)