迷宫问题,给定一个迷宫图,包括一个入口与一个出口,要求在图中找到一条从入口到出口的路径。
映射到二维0/1矩阵,0表示空位置,1表示障碍
辅助结构
dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)]
def mark(maze, pos): # 给迷宫maze的位置pos标2 表示“到过了”
maze[pos[0]][pose[1]] = 2
def passable(maze, pos): # 检查迷宫maze的位置pos是否可行
return maze[pos[0]][pos[1]] == 0
递归求解
- 每个时刻总有一个当前位置,开始时这个位置是迷宫入口
- 如果当前位置就是出口,问题已解决
- 否则,如果从当前位置已无路可走,当前的探查失败,退回一步
- 取一个可行相邻位置用同样方式探查,如果从那里可以找到通往出口的路径,那么从当前位置到出口的路径也就找到了
算法过程:
- 1.用mark函数标记当前位置
- 2.检查当前位置是否为出口,如果是则成功结束
- 3.逐个检查当前位置的四邻是否可以到达出口(递归调用自身)
- 4.如果对四邻的探索都失败,报告失败
def find_path(maze, pos, end):
mark(maze