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算法,我从名为'输入文件'. 问题是直到某个点我得到了正确的值,之后输出就没有了来了。为什么是这样吗?你知道吗
输入:
'输入文件':
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
在此之后,不显示输出。“
您的循环将永远运行在6->;3边上(因为生成树中不需要它,所以永远不会打印)。这条边在
matrix
中永远不会被清除。您的算法应该清除它检查的每一条边,但这些线有一个错误:它们应该使用索引
a
和b
,而不是u
和v
。你知道吗正如cricket_007所评论的,您还有一个与
matrix
的创建相关的问题,尽管碰巧,这个问题与您所问的问题无关。您当前正在向matrix
添加一批数据的额外副本,因为您将要从文件中读取的循环放在一个嵌套循环中,该循环将0
的值设置为999
。我很确定你只想读一次文件,而不是49次。你知道吗将这些线向上移出它们所在的循环:
相关问题 更多 >
编程相关推荐