簡體   English   中英

Python中的Kruskal算法

[英]Kruskal's Algorithm in Python

我最近了解了圖論,並嘗試通過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))代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM