我在Dijkstra算法代码中遇到了一个我不理解的错误 - 这是错误信息:
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())
我的第一个函数正确执行,我的逻辑对于我的第二个函数是正确的,虽然在线搜索解决方案已证明无效
答案 0 :(得分:3)
考虑到for
循环在Python中的工作方式,您不必编写
for currentNode in nodeTable:
currentDistance = nodeTable[currentNode].distFromSource + network[currentNode][nearestNeighbour] #gets current distance from source
你应该写:
for currentNode in nodeTable:
currentDistance = currentNode.distFromSource + network[currentNode][nearestNeighbour]
假设网络是一个包含密钥节点的字典,那就可以正常工作。