例:给一个二维列表(如图所示),表示迷宫(0表示通道,1表示围墙)。给出算法,求一条走出迷宫的路径。
队列——广度优先搜索
思路:使用队列存储当前正在考虑的节点。从一个节点开始,寻找所有接下来能继续走的点,继续不断寻找直到找到出口。
写代码时分别要考虑以下问题:
1. 当前所在节点四个方向分别为 x+1,y; x-1,y; x,y+1; x,y-1
2. 开辟队列时,要开辟一个三维队列,第三个空间用来记是哪个节点让它来的
3.当前节点是队首节点
4.当走到终点输出队列时,根据是谁让最后一个节点来的来找真实队列
5.可开辟另外一个队列来存储是谁让他来的
6.最后一个节点即队列最后一个元素
7. 没走到终点并且下一节点能走时,把该下一节点加入栈并标记为2,表示走过了
8.四条路都尝试走,如果一条路都不能走时,就说明没有路可以走了
from collections import deque
maze = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 1, 1, 1, 0, 0, 0, 0, 1