# Dijkstra - 最近邻确定Dijkstra - Nearest Neighbour Determination

（不包括第一列中的数字1-7）

> infinity = 1000000 invalid_node = -1
> startNode = 0
>
> #Values to assign to each node class Node:
>      distFromSource = infinity
>      previous = invalid_node
>      visited = False
>
> #read in all network nodes
> #node = the distance values between nodes def network():
>     f = open ('network.txt', 'r')
>     theNetwork = [[int(node) for node in line.split(',')] for line in
>     #print theNetwork
>
>     return theNetwork
>
> #for each node assign default values
> #populate table with default values def populateNodeTable():
>     nodeTable = []
>     index = 0
>     f = open('network.txt', 'r')
>     for line in f:
>       node = map(int, line.split(','))
>       nodeTable.append(Node())
>
>       #print "The previous node is " ,nodeTable[index].previous
>       #print "The distance from source is " ,nodeTable[index].distFromSource
>       index +=1
>     nodeTable[startNode].distFromSource =
> 0
>
>     return nodeTable
>
> #find the nearest neighbour to a particular node def
> nearestNeighbour(nodeTable,
> theNetwork):
>      nearestNeighbour = []
>      nodeIndex = 0
>      for node in nodeTable:
>           if node != 0 and Node.visited == False:
>              nearestNeighbour.append(nodeIndex)
>              nodeIndex +=1
>      print nearestNeighbour
>
>      return nearestNeighbour
>
> def tentativeDistance (theNetwork,
> nodeTable, nearestNeighbour):
>     shortestPath = []
>     for nodeIndex in nearestNeighbour:
>          currentDistance = nearestNeighbour[] + startNode
>          print currentDistance
> ##         if currentDistance < Node.distFromSource:
> ##            theNetwork[Node].previous = nodeIndex
> ##            theNetwork[Node].length = nodeIndex
> ##            theNetwork[Node].visited = True;
> ##            shortestPath.append(indexNode)
> ##            nodeIndex +=1
> ##    print shortestPath
>
> currentNode = startNode
>
> if __name__ == "__main__":
>     nodeTable = populateNodeTable()
>     theNetwork = network()
>     nearestNeighbour(nodeTable, theNetwork)
>     tentativeDistance(theNetwork, nodeTable, nearestNeighbour)

> Traceback (most recent call last):
> File "C:\Documents and Settings\Harvey\Desktop\2dArray.py", line 77, in <module>
>     tentativeDistance(theNetwork, nodeTable, nearestNeighbour)   File
> "C:\Documents and Settings\Harvey\Desktop\2dArray.py", line 51, in tentativeDistance
>     for nodeIndex in nearestNeighbour: TypeError: 'function' object is not iterable

[[0, 2, 4, 1, 6, 0, 0], [2, 0, 0, 0, 5, 0, 0], [4, 0, 0, 0, 5, 5, 0], [1, 0, 0, 0, 1, 1, 0], [6, 5, 0, 1, 0, 5, 5], [0, 0, 5, 1, 5, 0, 0], [0, 0, 0, 0, 5, 0, 0]]

> The previous node is  -1
The distance from source is  1000000 # happens 7 times#
>

[0, 1, 2, 3, 4, 5, 6]

> for nodeIndex in nearestNeighbour:
TypeError: 'function' object is not iterable

## 2 个回复2

### #2楼 票数：1 已采纳

tentativeDistance(theNetwork, nodeTable, nearestNeighbour)

x = nearestNeighbour(nodeTable, theNetwork)
tentativeDistance(theNetwork, nodeTable, x)

## 未解决问题？本站智能推荐：

1回复

3回复

1回复

### Dijkstra算法的多个输入

Dijkstra算法的输入是有向和加权图，通常由邻接（距离）矩阵和起始节点表示。 我有两个不同的距离矩阵用作输入，代表两种不同的基础设施（例如，道路和自行车道）。 任何想法如何修改Dijkstra的算法使用这两个输入？ 我想用Python实现。 谢谢！
1回复

1回复

2回复

1回复

11回复