【发布时间】:2023-03-03 20:23:02
【问题描述】:
我尝试在 python 中创建一个 1 函数 prims 算法,但它似乎不起作用
def prim(edges):
inGraph = ['A']
discovered = []
results = []
counter = 0
while True:
tmplist = []
for i in edges:
if inGraph[counter] in i:
discovered.append(i)
tmplist.append(i)
for i in tmplist:
edges.remove(i)
tmp = []
for i in discovered:
tmp.append(i[2])
mini = tmp.index(min(tmp))
alpha = discovered[mini][0]
beta = discovered[mini][1]
if alpha not in inGraph or beta not in inGraph:
if alpha in inGraph:
inGraph.append(beta)
elif beta in inGraph:
inGraph.append(alpha)
results.append(discovered[mini])
discovered.pop(mini)
if discovered == []:
break
counter+=1
return (inGraph, results)
打印 [['A', 'B', 1], ['A', 'C', 102], ['B', 'C', 4], ['C', 'F', 2], ['B', 'F', 1], ['F', 'E', 1]] print prim([['A', 'B', 1], ['A', 'C', 102], ['B', 'C', 4], ['C', 'F', 2 ], ['B', 'F', 1], ['F', 'E', 1]])
问题在于发现的某个地方,要么是 if 语句检查它是否为空,要么是从中删除一个元素。我只是不知道放在哪里
【问题讨论】:
-
永远不要在遍历列表时更改列表:不要在遍历列表时调用
edges.remove(..)。 -
而且你的算法效率很低。
-
效率无关紧要,也不是通过 for 循环进行编辑
-
是的,我知道,但迭代器有一个合同,您不能同时更改列表。
-
见here。
标签: python algorithm python-2.7 prims-algorithm