def findCriticalAndPseudoCriticalEdges(n, edges):
for i in range(len(edges)):
edges[i].append(i)
edges.sort(key=lambda x: x[1])
key = kruskal(n, edges, [], 0) #初始圖的最小生成樹權值
anw = [[], []]
for i in range(len(edges)):
temp = []
for j in range(len(edges)):
if i != j: temp.append(edges[j])
m = kruskal(n, temp, [], 0) #原始圖中減去這條邊對應的最小生成樹權值
n = kruskal(n, temp, [edges[i][0], edges[i][1]], edges[2]) #原始圖中默認從這條邊開始所能找到的最小生成樹的權值
if m > key:
anw[0].append(edges[i][3])
elif n == key:
anw[1].append(edges[i][3])
return anw
def kruskal(n, ed, Point, nuke):
if len(Point) == n: return nuke
for i in range(len(ed)):
tt = 0
if ed[i][0] not in Point:
Point.append(ed[i][0])
tt=1
if ed[i][1] not in Point:
Point.append(ed[i][1])
tt=1
if tt==1:
nuke += ed[i][2]
if len(Point) == n: break
print(nuke)
if len(Point) != n: return -1
return nuke
print(findCriticalAndPseudoCriticalEdges(5,[[0,1,1],[1,2,1],[2,3,2],[0,3,2],[0,4,3],[3,4,3],[1,4,6]]))
刷演算法題,上述代碼解決的是尋找一個無向有權圖中的關鍵邊和偽關鍵邊,但是下面的kruskal函式引數為(節點數,邊長資訊,已經連通的點的集合,預先設定的最小生成樹的權值初始值),這個函式最侄訓傳輸入的圖的最小生成樹對應的權值。
可是跑著跑著, nuke += ed[i][2]這行給我報了'int' object is not iterable這個錯,發現在呼叫了幾次kruskal函式后,里面的用來記錄權值的整形變數nuke莫名其妙變成了一個list
迷惑,求解,這是什么pycharm還是python的源生缺陷么?
uj5u.com熱心網友回復:
12行向kruskal傳的引數是edges[2], 本來就是個list轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253649.html
上一篇:新人小白求助,不同jupyter notebook檔案的函式,為啥回傳DataFrame無法使用?
下一篇:python
