前面我们分析的是用队列和栈求解迷宫问题,感兴趣的可以看一下:
https
算法描述
我们知道递归和栈其实是很类似的,所以用递归求解的思路与栈的思路大致相同,下面我们来看具体思路:
建立迷宫
- 首先我们用一个二维数组建立迷宫地图( 其中1表示障碍,0表示可走坐标,2表示走过的路径用以记录):
判断下一步的方向
- 然后我们判断四个方向上、右、下、左(顺时针方向)是否可走,即该位置为空地,无障碍,且未走过(重点):
判断失败时回溯
- 当我们走到一个结点位置时,发现上下左右都或有障碍,或已走过时则说明这条路径是错误的,于是就回溯至上一节点,让上一结点继续对四个方位进行试探,以此寻找其他的路径.
此时的操作回溯的操作为将此层递归结束,回到上一层递归中,再判断下一个方位。
找到终点时即可结束寻找
- 当判断的点为我们设定的重点时,及说明已经有一条从起点到终点的路径了,所以此时我们就可以结束寻找了。
输出路径
- 因为再寻找到过程中我们对其中的路径所过的点都做了记录,因此此时将路径输出即可。
- 以上迷宫问题就基本得到了解决,我们在主函数调用即可。
代码清单
构建部分
#include<iostream>
using namespace std;
typedef struct{
//记录位置
int hang;
int lie;
int next;
}Weizhi;
//建立迷宫
// 0 1 2 3 4 5 6 7 8 9 //10*10的迷宫
int a[][10]={
1,1,1,1,1,1,1,1,1,1,
1,-1,1,0,0,0,1,1,1,1,
1,0,0,0,0,0,1,0,0,1,
1,