Python 使用Prim'的最小生成树中的错误;s算法

Python 使用Prim'的最小生成树中的错误;s算法,python,python-3.x,minimum-spanning-tree,Python,Python 3.x,Minimum Spanning Tree,我试图实现Prim的算法,但每次运行时输出都会发生变化 {'A':{'C'},'B':{'A'},'F':{'G'},'E':{'B'},'D':{'E'},'C':{'F'} 应该是什么时候 {'D':{'E'},'E':{'B'},'B':{'A'},'A':{'C'},'C':{'F'},'F':{'G'} 不确定这里到底发生了什么,我试着调试,但没有用。有人知道我是否遗漏了一些显而易见的东西吗 从集合导入defaultdict 进口heapq def创建生成树(图,起始顶点): ms

我试图实现Prim的算法,但每次运行时输出都会发生变化

{'A':{'C'},'B':{'A'},'F':{'G'},'E':{'B'},'D':{'E'},'C':{'F'}
应该是什么时候

{'D':{'E'},'E':{'B'},'B':{'A'},'A':{'C'},'C':{'F'},'F':{'G'}
不确定这里到底发生了什么,我试着调试,但没有用。有人知道我是否遗漏了一些显而易见的东西吗

从集合导入defaultdict
进口heapq
def创建生成树(图,起始顶点):
mst=defaultdict(设置)
访问=设置([开始顶点])
边=[
(成本,起始点,至)
对于to,图形[起始顶点]中的成本。项()
]
heapq.heapify(边)
而边缘:
成本,frm,to=heapq.heappop(边缘)
如果未访问,请执行以下操作:
已访问。添加(到)
mst[frm]。添加(到)
对于to_next,图[to]中的成本。项()
如果下一步未访问,请执行以下操作:
heapq.heappush(边,(成本、到、到下一个))
返回mst
示例_图={
'A':{'B':2,'C':3},
'B':{'A':2,'C':12,'D':10,'E':4},
'C':{'A':3,'B':12,'F':5},
'D':{'B':10,'E':7},
'E':{'B':4,'D':7,'F':16},
'F':{'C':5,'E':16,'G':9},
'G':{'F':9},
}
打印(dict(创建生成树(示例图“D”))

仔细查看两个输出

{'A':{'C'},'B':{'A'},'F':{'G'},'E':{'B'},'D':{'E'},'C':{'F'}
{'D':{'E'},'E':{'B'},'B':{'A'},'A':{'C'},'C':{'F'},'F':{'G'}
是相同的

因为它是一本字典,(键,值)对很重要,答案是一样的,而不是它们出现的顺序