这是我尝试为最小生成树实现 Prims算法的程序。我的问题是当我作为一个整体执行程序时,它会显示 KeyError:7 :
但是当我在Interpreter中执行错误导致部分时,它显示没有错误?
我的代码:
edges = {
'A':{'D':1,'B':3},
'B':{'A':3,'C':4},
'C':{'B':4,'D':5,'A':2,'E':7},
'D':{'A':1,'C':5,'E':6},
'E':{'D':6,'C':7}
}
# here NULL represented by -1 and Infinity represented by 1000
vertices = {
'A':[1000,-1],
'B':[1000,-1],
'C':[1000,-1],
'D':[1000,-1],
'E':[1000,-1]
}
def EXTRACTMIN():
low = 'A'
for key in vertices.keys():
if vertices[low][0]>vertices[key][0]:
low=key
del vertices[low]
return low
vertices['A'][0]=0
while not(vertices=={}):
u=EXTRACTMIN()
print(str(u)+" ")
for v in [x for x in edges[u].keys()]:
if v in vertices and edges[u][v]<vertices[v][0]:
vertices[v][0]=edges[u][v]
答案 0 :(得分:0)
嗯,问题出在函数EXTRACTMIN
首先从A
删除密钥vertices
,因为A
是最小值。
然后,当再次调用函数EXTRACTMIN
时,您尝试再次删除它(因为vertices[low][0]>vertices[key][0]
总是False
)但您已经删除A
并且它不存在在vertices
。
你也没有把它放回到while循环中因为条件为v in vertices
,我们知道A
不在那里