【发布时间】:2020-04-01 02:06:24
【问题描述】:
我正在编写一个迷宫求解算法,一旦你撞到“墙”,我就会遇到回溯问题
到目前为止,我的代码检查了一些基本的递归情况,例如我是否已经到达终点或是否检查了所有点。我也这样做了,以便有一个列表可以跟踪解决方案“路径”并相应地添加和删除点。因此,每次添加一个点时,它都会检查其是否有效并检查该点,上、左、右、下等。如果没有一个有效,则执行此语句
else:
path.pop()
return solve_maze(maze,path,end)
这将删除点和回溯,并在函数开头检查以下条件。
square = list(path[-1])
#Base Case
if end in path:
return True
elif square == None:
return False
elif maze[square[0]][square[1]] == "X":
path.pop()
return solve_maze(maze,path,end)
elif tuple(square) in path:
path.pop()
return solve_maze(maze,path,end)
但是,当我执行最后一行时,它只会删除路径中的所有点,并且出现索引错误。
对于遇到死胡同后如何回溯有什么建议吗?
【问题讨论】:
-
如果你想逃离迷宫你只需要选择一堵墙并跟随它,你不需要递归
-
要求这样做的方式是递归;一旦撞到墙,就必须回溯
-
您能否提供整个功能、输入/输出示例以及您的解决方案失败的地方?您提供给我们的详细信息基本上很难帮助您
-
这个过程的通用(谷歌)名称是深度优先搜索。
标签: python if-statement recursion maze recursive-backtracking