Я давно работаю над этой проблемой и почти достиг ее. По сути, я реализую поиск в глубину, отслеживая узлы, чтобы найти целевой узел и иметь возможность отслеживать путь от начального узла к целевому узлу. Я могу найти целевой узел и отслеживать путь, но проблема заключается в следующем:
Когда я пытаюсь воссоздать свой маршрут, я застреваю в бесконечном цикле, где, скажем, узел x1 указывает на узел x2, а узел x2 указывает на узел x1. Вот соответствующий код (на питоне):
# Starting position
stack = util.Stack()
currentState = problem.getStartState()
goalState = []
directions = {}
visited = []
if problem.isGoalState(currentState): return []
else:
stack.push(currentState)
while stack.isEmpty() == False:
currentState = stack.pop()
if currentState in visited:
continue
if problem.isGoalState(currentState):
goalState = currentState
break
visited.append(currentState)
for state in problem.getSuccessors(currentState):
stack.push(state[0])
directions[state[0]] = (currentState, state[1])
print goalState
goalState = directions[goalState][0]
print goalState
goalState = directions[goalState][0]
print goalState
goalState = directions[goalState][0]
print goalState
goalState = directions[goalState][0]
print goalState
goalState = directions[goalState][0]
print goalState
goalState = directions[goalState][0]
print goalState
goalState = directions[goalState][0]
Каждое состояние представляет собой кортеж ((координата узла), «направление движения», стоимость). Я понимаю, что мне нужен цикл while, чтобы правильно вернуться к начальному состоянию, конечная часть кода предназначена только для того, чтобы показать вам, ребята, этот вывод:
(1, 1) (2, 1) (2, 2) (2, 1) (2, 2) (2, 1) (2, 2)
Любая помощь будет ОЧЕНЬ оценена! Пишу сюда впервые, надеюсь, все сделал правильно.