2011-03-07 55 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] 

假定网络是与键节点的字典,这将很好地工作。

相关问题