栈解决迷宫问题

这种解决思路类似DFS,从起点开始向前走,每走一步,就向四周探寻可走方向,如果找到一个可走方向,首先“保存现场”(将走向的是哪一个方向保存下来),再向找到的方向走一步,重复上述过程。同时对走过的路上做一个标记,防止形成死循环。

如果发现走到了死胡同,四周都无路可走,则回退到上一步,“恢复现场”(从保存的方向开始,看下一个方向是否可走),如果还是死胡同,再回退。若回退到起点(栈已经pop到没有元素了),则无解。

如果走着走着发现走到了终点,则找到了迷宫的一个解,此时将栈内元素依次出栈,并存储到一个数组内,再逆序输出数组就得到了我们想要的一条路径。

这个算法找出来的可能并不是最优解。但是可以在找到一条路径以后,再回到上一步,继续上面的步骤就可以输出所有解。
1
算法实现如下,mg二维数组用来存储迷宫,0:可走,1:不可走,-1:走过了。

注意,在回退到上一步的时候要把该店对应mg数组的值还原为0,不要影响其他路的寻找。
由于回溯到上一步以后会从下一个可能的方向开始走,不会再回到还原为0的这一步,所以不用担心会形成死循环。

你可能感兴趣的:(笔记)