def shortestPath(digraph, start, end, maxTotalDist, maxDistOutdoors, visited=[]):
if not (digraph.hasNode(start) and digraph.hasNode(end)):
raise ValueError('Start or end not in graph.')
path = [str(start)]
if start == end:
return path
shortest = None
MinimumTotalDist = 0
for node in digraph.childrenOf(start):
if (str(node) not in visited): #avoid cycles
visited = visited + [str(node)] #new list
FirstStepDist = digraph.childrenOf(start)[node][0]
FirstStepOutdoors = digraph.childrenOf(start)[node][1]
newPath = shortestPath(digraph, node, end, maxTotalDist, maxDistOutdoors, visited)
if newPath == None:
continue
TotalDist = int(FirstStepDist) + TotalDistance(digraph,newPath)
TotalOutdoorDist = int(FirstStepOutdoors) + TotalOutdoorDistance(digraph,newPath)
**if TotalOutdoorDist > maxDistOutdoors:
continue**
if (shortest == None or TotalDist < MinimumTotalDist):
shortest = newPath
MinimumTotalDist = TotalDist
if shortest != None:
path = path + shortest
else:
path = None
if TotalDistance(digraph,path) <= maxDistOutdoors:
return path
Это не дает мне правильный ответ. Он возвращает правильный путь, да. Однако путь, который он возвращает, не является кратчайшим путем. Проблема заключается в жирной строке, где я пропускаю путь, если его общее расстояние на открытом воздухе больше, чем ограничение maxDistOutdoors, но я не знаю, как это изменить. Когда я удаляю эту жирную линию, я получаю правильные минимальные пути, но если мне нужна такая проверка, потому что я хочу найти минимальные пути с общим расстоянием снаружи меньше, чем maxDistOutdoors.
Я уже пробовал печатать заявления, и я собираюсь сдаться. Я просто не понимаю, почему это неправильно сейчас.