Эй, как название говорит, что я пытаюсь реализовать ограниченный по глубине поиск в Python3, который возвращает путь, заданный графиком, вершину вершины и вершину цели. Я немного борюсь с тем, как применять предел для поиска. До сих пор у меня есть:Реализация глубины Ограниченный поиск путей со стеком
def dfs(g, v, goal, limit=-1):
SENTINEL = object()
visitedStack = [v]
path = ""
while visitedStack:
currentVertex = visitedStack.pop()
if g.getVertex(currentVertex) != None:
if g.getVertex(currentVertex).visited == False:
path += currentVertex + ' -> '
g.getVertex(currentVertex).hasBeenVisited()
if currentVertex == goal:
return path[:-3]
elif currentVertex == SENTINEL:
limit += 1
elif limit != 0:
limit -= 1
visitedStack.append(SENTINEL)
visitedStack.extend(g.getVertex(currentVertex).getConnections())
return "Depth limit was reached"
EDIT: Я изменил часть кода, чтобы проверить посещаемые вершины. После моего редактирования возвращаемый поиск не работает должным образом. Например, я установил ограничение глубины на 3, но вернемся к пути 4 или 5. В других случаях я установил предел в 7 и вернул «достигнутый лимит». ПРИМЕЧАНИЕ: наименьший путь равен 3
спасибо! Я получаю несколько проблем, хотя, я сделал некоторые исправления, отмеченные в моем сообщении. – Brian
Вы добавляете каждый невидимый узел в путь, но никогда не удаляете узлы. Текущий узел должен быть добавлен в конец пути, когда поиск идет на слой глубже, но удаляется, когда поиск возвращает слой. Я пересмотрел свое решение, чтобы отслеживать путь. – RootTwo