我试图在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&# 39;,' F',1],[' F',' E',1]] print prim([[' A',' B',1],[' A',' C',102],[& #39; B',' C',4],[' C',' F',2],[' B&#39 ;,' F',1],[' F',' E',1]])
问题出在发现的某个地方,要么if语句检查它是否为空或从中删除一个元素。我只是不确定把它放在哪里
答案 0 :(得分:1)
想象一下,只有一个顶点与'A'相连,比如'B'。因此,在第一次迭代时,您将只发现一个边缘。将'B'添加到inGraph后,您只会弹出已发现的边缘。
所以你发现的== []变为真,循环中断,即使可能仍有数千条边与'B'连接。
要终止主循环,计算顶点的数量,如果len(inGraph)== no_of_vertex,则计算中断。
为此,你可以:
V = set()
for e in edges:
v.add(e[0])
v.add(e[1])
no_of_vertex = len(V)
V = None #To help garbage collector