def kruskals():
matrix = []
total = 0
min = 999
u = 0
v = 0
parent = [None]*8
noOfEdges = 1
for i in range(0,7):
parent[i] = 0
for j in range(0,7):
with open('input.txt') as file:
for line in file:
matrix.append([int(val) for val in line.split()])
#print matrix
if matrix[i][j]== 0:
matrix[i][j] = 999
while (noOfEdges < 7 ):
min = 999
for i in range(0,7):
for j in range(0,7):
if min > matrix[i][j]:
min = matrix[i][j]
a = u = i
b = v = j
while (parent[u] != 0):
u = parent[u]
while (parent[v] != 0):
v = parent[v]
if(v != u):
noOfEdges = noOfEdges + 1
print("edge found :{}->{}:{}".format(a,b,min))
total = total + min
parent[v] = u
matrix[u][v] = 999
matrix[v][u] = 999
print("The weight of minimum spanning tree is : {}".format(total))
return
f.close()
kruskals()
我在python中编写了kruskals算法。我正在从名为&#39; input.txt&#39;的文本文件中获取输入。问题是我得到了正确的值直到某一点,之后输出没有到来。为什么会这样?
输入
&#39; input.txt&#39;:
0 28 999 999 999 10 999
28 0 16 999 999 999 14
999 16 0 12 999 999 999
999 999 12 0 22 999 18
999 999 999 22 0 25 24
10 999 999 999 25 0 999
999 14 999 18 24 999 999
输出:(直到显示正确)
edge found :0->5:10
edge found :2->3:12
edge found :1->6:14
edge found :1->2:16
此后输出未显示。&#34;
答案 0 :(得分:0)
你的循环在6-> 3边缘永远运行(不会打印,因为在生成树中不需要它)。该边缘永远不会在matrix
中被清除。您的算法应该清除它检查的每个边缘,但这些行有一个错误:
matrix[u][v] = 999
matrix[v][u] = 999
他们应该使用索引a
和b
,而不是u
和v
。
正如cricket_007所述,您还遇到了与matrix
的创建相关的问题,但事实上,该问题与您提出的问题无关。您目前正在向matrix
添加批次数据的额外副本,因为您已经将循环放在嵌套循环内的文件中读取0
是999
。我很确定你只想读一次文件,而不是49次。
将这些线向上移动并移出它们所在的循环:
with open('input.txt') as file:
for line in file:
matrix.append([int(val) for val in line.split()])