python - Python 中的 Kruskal 算法

标签 python algorithm graph-theory kruskals-algorithm

我最近学习了图论,我正在尝试实现 Kruskal 算法来找到最小值。使用权重矩阵在图中生成树。我得到了一个矩阵的正确输出和另一个矩阵的越界错误! 它给了我一个错误:

[[1000,16,12,21,1000,1000,1000],[16,1000,1000,17,20,1000,1000],[12,1000,1000,28,1000,31,1000],[21,17,28,1000,18,19,23],[1000,20,1000,18,1000,1000,11],[1000,1000,31,19,1000,1000,27],[1000,1000,1000,23,11,27,1000]]

我得到正确答案的矩阵如下: (注:1000用来表示无穷大的权重

vertices=5
spset=[True]*5
wt=[[1000,1,3,4,1000],[1,1000,5,1000,7],[3,5,1000,6,8],[4,1000,6,1000,2],[1000,7,8,2,1000]]


row=[0]

for i in xrange(vertices-1):
  row_num,col_num,min_no=-1,-1,1000
  for i in row:
    temp=min(wt[row[i]])
    if(min_no>temp):
      min_no=temp
      row_num=i
      col_num=wt[i].index(temp)
  print str(min_no)+"("+str(row_num)+","+str(col_num)+")"
  spset[col_num]=False
  wt[col_num][row_num]=1000
  for i in xrange(vertices):
    wt[i][col_num]=1000
  row.append(col_num)

d=raw_input()

最佳答案

在下面的代码块中,

for i in row:
    temp=min(wt[row[i]])

i 正在 row 的元素上迭代。如果row有两个元素[0,2],那么当i变为2时,row[i]就会给出一个 IndexError: list index out of range

如果您想遍历 row 的元素,请改用 for i in range(len(row))

关于python - Python 中的 Kruskal 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21403648/

相关文章:

python - Docker 无法找到满足要求的版本 mysqlclient == 2.0.3

java - 如何在图的边缘包含权重?

python - 我如何判断一条路径是否与另一条路径相似?

python - Heroku 不安装 requirements.txt 中列出的任何内容

python - Flask - 如何使用 RotatingFileHandler 将 werkzeug 日志写入日志文件?

python - 导入键盘出现 python 错误

algorithm - 我试图找到一个 "bartender algorithm"

algorithm - 如何解决这个线性编程问题?

按优先级分配资源的算法

math - 如果添加新边,图的强连通分量的数量如何变化