Python - Расчет расстояния в Дейкстре

У меня возникли проблемы с определением расстояния каждого узла от начального узла, а точнее с получением какой-либо информации обратно. Я не получаю вывод из своей функции, прикрепленной по следующей ссылке.

#Values to assign to each node
class Node:
     distFromSource = infinity
     previous = invalid_node
     visited = False

#for each node assign default values    
def populateNodeTable(network): 
    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

#calculate the distance of each node from the start node
def tentativeDistance(currentNode, nodeTable):
    nearestNeighbour = []
    for currentNode in nearestNeighbour:
      currentDistance == currentNode.distFromSource + [currentNode][nearestNeighbour] #gets current distance from source
      print "The current distance"
      if currentDistance != 0 & currentNode.distFromSource < Node[currentNode].distFromSource:
         nodeTable[currentNode].previous = currentNode
         nodeTable[currentNode].length = currentDistance
         nodeTable[currentNode].visited = True
         nodeTable[currentNode] +=1
         nearestNeighbour.append(currentNode)
         for currentNode in nearestNeighbour:
           print nearestNeighbour

    return nearestNeighbour

Моя логика, по крайней мере, на мой взгляд, правильна; Тем не менее, я не получаю столько, сколько сообщение об ошибке при запуске кода.

2 ответа

Решение

Вы устанавливаете nearestNeighbour быть пустым списком, а затем вы перебираете его for currentNode in nearestNeighbour - который ничего не делает, потому что список пуст - и затем вы возвращаетесь из функции.

(Я предполагаю tentativeDistance это функция, которую вы вызываете и ничего не видите.)

Вы должны переосмыслить свой алгоритм разработки. Попробуйте найти определение псевдокода алгоритма Дейкстры и реализовать его в Python. В частности, вы должны подумать о потоке управления в вашей программе.

Возможно, вы захотите взглянуть на этот рецепт поваренной книги для реализации Dijkstra на Python и посмотреть, сможете ли вы его понять.

Другие вопросы по тегам