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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...