数据结构---复杂迷宫求解(多路径带环)

本文探讨了在多出口迷宫中,当路径存在环时如何找到最短路径的问题。传统方法无法解决路径环导致的最短路径遗漏。通过修改判断和标记规则,更新后的代码成功找到了正确的最短路径。
摘要由CSDN通过智能技术生成

上一篇博客我们提到了多出口迷宫的情况,但是在此基础上迷宫路径如果带环呢,如何解决?
情况如下图:
这里写图片描述
可以看出,红色圈出来的部分形成了一个环。那如果我们还是采用上次的办法,看看能不能找出最短路径。
这里写图片描述
通过上图,我们可以看到并不能达到预期效果,打印出来的并不是最短路径。这是为什么呢?
原因在于我们按照顺时针“上右下左”的顺序探测该点四周能否能落脚时,如下面 A 图所示,先找到了第一条路径即1a点是出口,然后回溯,找其他路径,等退回到b点时,发现向下可以走,于是向下找到了第二条路径即2号,c点也是出口,于是回溯,向左发现了3号路径,找到了d出口。此时已经找到了三条路径。

而我们认为最短的那条路径(即B图中蓝色线路),此时真正走过的线路却是B图中用2标记过的,显然不是最短路径。当回溯到a点时,发现下面还有路,于是向下走,当走到b点时,发现它已经被标记为2,走不通了,所以,最短的那条路径被b这个节点封锁了,我们自然而然也就找不到,当遍历完后也就只找到了三条路径。

显然,是我们判断当前点能不能落脚和标记原则出了问题,那我们如何改进呢?
来看下面这份代码是如何解决的,里面有详解,思路同之前一样,只是修改了判断当前点能不能落脚和标记的规则:

void MazeInitShortPathWithCycle(Maze* maze)
{
    int map[MA
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值