2011-03-07 53 views
0

我有,我沒有在我的Dijkstra算法代碼理解錯誤 - 這裏是錯誤消息:Python的 - 「對象不能被解釋爲索引」錯誤

Traceback (most recent call last): 
    File "C:\Documents and Settings\Harvey\Desktop\algorithm.py", line 52, in <module> 
    tentativeDistance(currentNode,populateNodeTable()) 
    File "C:\Documents and Settings\Harvey\Desktop\algorithm.py", line 29, in tentativeDistance 
    currentDistance = nodeTable[currentNode].distFromSource + network[currentNode][nearestNeighbour] #gets current distance from source 
TypeError: object cannot be interpreted as an index 

這裏是我的代碼:

infinity = 1000000 
invalid_node = -1 
startNode = 0 

class Node: 
    distFromSource = infinity 
    previous = invalid_node 
    visited = False 

def populateNodeTable(): 
    nodeTable = [] 
    index =0 
    f = open('route.txt', 'r') 
    for line in f: 
     node = map(int, line.split(',')) 
     nodeTable.append(Node()) 
     print nodeTable[index].previous 
     print nodeTable[index].distFromSource 
     index +=1 
    nodeTable[startNode].distFromSource = 0 
    #currentNode = nodeTable[startNode] 

    return nodeTable 

def tentativeDistance(currentNode, nodeTable): 
    nearestNeighbour = [] 
    #j = nodeTable[startNode] 
    for currentNode in nodeTable: 
     currentDistance = nodeTable[currentNode].distFromSource + network[currentNode][nearestNeighbour] #gets current distance from source 
     if currentDistance != 0 & NodeTable[currentNode].distFromSource < Node[currentNode].distFromSource: 
     nodeTable[currentNode].previous = currentNode 
     nodeTable[currentNode].length = currentDistance 
     nodeTable[currentNode].visited = True 
     nodeTable[currentNode] +=1 
     nearestNeighbour.append(currentNode) 
     print nearestNeighbour 

    return nearestNeighbour 

currentNode = startNode 

if __name__ == "__main__": 
    populateNodeTable() 
    tentativeDistance(currentNode,populateNodeTable()) 

我的第一個功能正確執行,以及我的邏輯是我的第二個功能正確,雖然對解決方案的在線搜索已經證明了不結果

回答

3

鑑於方式for圈在Python工作,你不必寫

​​3210

而應該寫:

for currentNode in nodeTable: 
    currentDistance = currentNode.distFromSource + network[currentNode][nearestNeighbour] 

假定網絡是與鍵節點的字典,這將很好地工作。

相關問題