如何解决Prim 算法的实现未找到交叉边存在
我正在实施 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 举报,一经查实,本站将立刻删除。