!-- 基于C语言的迷宫求解问题 --!

迷宫求解问题


    我们要先初始化一个迷宫地图,这里分为两种,一类为简单迷宫(不带环),一类为复杂迷宫(带环)。具体示例如下,这里采用6*6的数组表示迷宫地图,每个位置上对应元素的值非0即1,1表示路,0表示墙;
    这里迷宫求解问题,我们可以采用两种方式求解,一种是利用函数本身递归的调用,一种则是利用循环一直查找。且这里的迷宫求解问题也分为两类,一类是简单的查找迷宫的一条路径,一类则是找到迷宫的最小路径。

一.  查找迷宫的一条通路

    1. 我们从入点开始,先判断入口点是否能走,若入口点都不能走,说明传入参数错误,直接返回;
    2. 入口点能走,我们就将其标记,并放入栈中;
    3. 检查当前点是否为出口(我们将迷宫四周的非入口点都可以看做出口),是出口就找到了一条路;
    4. 若当前点不是出口,则对当前点按顺时针方向(上、右、下、左)的顺序依次探测,是否能走,能走就标记入栈,再按同样的方式继续向下探测,直至找到出口;
    5. 直至找到一条完整的路径时,查找结束,栈内存放即为路径。

二. 查找迷宫的最短路径

    1. 定义两个栈,一个为cur当前栈,存放查找的路径,一个为short栈,存放最短路径;
    2. 我们从入点开始,先判断入口点是否能走,若入口点都不能走,说明传入参数错误,直接返回;
    3. 入口点能走,我们就将其标记,并放入cur栈中;
    4. 检查当前点是否为出口(我们将迷宫四周的非入口点都可以看做出口),是出口就找到了一条路;
   5. 若当前点不是出口,则对当前点按顺时针方向(上、右、下、左)的顺序依次探测,是否能走,能走就标记入栈,再按同样的方式继续向下探测,直至找到出口;
    6. 找到一条路时, 若cur栈中路径比short栈内路径短,或是short栈为空,则用cur中路径替代short中路径;
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值