为什么我在这段代码中没有得到正确的输出?

2024-09-28 05:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在此之后,不显示输出。“


Tags: inforifrangeminmatrixfileparent
1条回答
网友
1楼 · 发布于 2024-09-28 05:37:29

您的循环将永远运行在6->;3边上(因为生成树中不需要它,所以永远不会打印)。这条边在matrix中永远不会被清除。您的算法应该清除它检查的每一条边,但这些线有一个错误:

  matrix[u][v] = 999
  matrix[v][u] = 999

它们应该使用索引ab,而不是uv。你知道吗

正如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()])

相关问题 更多 >

    热门问题