微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Prim 算法的实现未找到交叉边存在

如何解决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 举报,一经查实,本站将立刻删除。