我試圖讓Python中的1個功能普里姆算法,但它似乎並不奏效1功能Prim算法蟒蛇
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循環 –