递归方式求解迷宫问题(对比栈)

前面我们分析的是用队列和栈求解迷宫问题,感兴趣的可以看一下:
https

算法描述

我们知道递归和栈其实是很类似的,所以用递归求解的思路与栈的思路大致相同,下面我们来看具体思路:

建立迷宫

  1. 首先我们用一个二维数组建立迷宫地图( 其中1表示障碍,0表示可走坐标,2表示走过的路径用以记录):

判断下一步的方向

  1. 然后我们判断四个方向上、右、下、左(顺时针方向)是否可走,即该位置为空地,无障碍,且未走过(重点):
    在这里插入图片描述

判断失败时回溯

  1. 当我们走到一个结点位置时,发现上下左右都或有障碍,或已走过时则说明这条路径是错误的,于是就回溯至上一节点,让上一结点继续对四个方位进行试探,以此寻找其他的路径.
    此时的操作回溯的操作为将此层递归结束,回到上一层递归中,再判断下一个方位。

找到终点时即可结束寻找

  1. 当判断的点为我们设定的重点时,及说明已经有一条从起点到终点的路径了,所以此时我们就可以结束寻找了。

输出路径

  1. 因为再寻找到过程中我们对其中的路径所过的点都做了记录,因此此时将路径输出即可。
  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,
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值