你好,
我在计算Dijkstra算法代码中每个节点到起始节点的距离时遇到了一些麻烦。以下是我坚持使用粗体的部分的代码:
- 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
-
- return nodeTable
-
- def tentativeDistance(currentNode, nodeTable):
- nearestNeighbour = []
- for currentNode in nodeTable:
- # if Node[currentNode].distFromSource +
- currentDistance = startNode + currentNode
- # currentDistance = currentNode.distFromSource + nodeTable.currentNode
- currentNode.previous = currentNode
- currentNode.length = currentDistance
- currentNode.visited = True
- currentNode +=1
- nearestNeighbour.append(currentNode)
- print nearestNeighbour
-
- return nearestNeighbour
-
- currentNode = startNode
-
- if __name__ == "__main__":
- populateNodeTable()
- tentativeDistance(currentNode,populateNodeTable())
我不知道我哪里错了,我现在试了几种方法,但似乎都不管用
# 回答1
您正在为两个不同的变量使用CurentNode。
- def tentativeDistance(currentNode, nodeTable):
- # and
- for currentNode in nodeTable:
打印值,以便您知道它们是什么。例如:
- print "startNode =", startNode, type(startNode)
- print "currentNode =", currentNode, type(currentNode)
- #
- #Node[currentNode].distFromSource +
- # currentDistance = startNode + currentNode
也许一本班级词典会比一份班级清单更容易理解。
- class Node:
- def __init__(self, previous):
- infinity = 1000000
- invalid_node = -1
- self.distFromSource = infinity
- self.previous = previous
- self.visited = False
-
-
- def populateNodeTable():
- startNode = 0
- ## dictionary with key = record or node number
- nodeTable = {}
- ## f = open('route.txt', 'r')
- f = range(10) ## test data
- for index, line in enumerate(f):
- nodeTable[index] = Node(index-1) ## index-1 = previous record
- nodeTable[startNode].distFromSource = 0
- nodeTable[startNode].previous = -1
-
- ## print ascending
- for node in range(0, len(nodeTable)):
- ## add to distFromSource
- nodeTable[node].distFromSource += node
- print node, nodeTable[node].distFromSource
-
- ## print descending using another method
- print "-"*30
- index = 9 ## last node number
- while index > -1:
- print index, nodeTable[index].distFromSource, \
- "previous =", nodeTable[index].previous
- index = nodeTable[index].previous
-
-
- populateNodeTable()