上一篇博客我们提到了多出口迷宫的情况,但是在此基础上迷宫路径如果带环呢,如何解决?
情况如下图:
可以看出,红色圈出来的部分形成了一个环。那如果我们还是采用上次的办法,看看能不能找出最短路径。
通过上图,我们可以看到并不能达到预期效果,打印出来的并不是最短路径。这是为什么呢?
原因在于我们按照顺时针“上右下左”的顺序探测该点四周能否能落脚时,如下面 A 图所示,先找到了第一条路径即1,a点是出口,然后回溯,找其他路径,等退回到b点时,发现向下可以走,于是向下找到了第二条路径即2号,c点也是出口,于是回溯,向左发现了3号路径,找到了d出口。此时已经找到了三条路径。
而我们认为最短的那条路径(即B图中蓝色线路),此时真正走过的线路却是B图中用2标记过的,显然不是最短路径。当回溯到a点时,发现下面还有路,于是向下走,当走到b点时,发现它已经被标记为2,走不通了,所以,最短的那条路径被b这个节点封锁了,我们自然而然也就找不到,当遍历完后也就只找到了三条路径。
显然,是我们判断当前点能不能落脚和标记原则出了问题,那我们如何改进呢?
来看下面这份代码是如何解决的,里面有详解,思路同之前一样,只是修改了判断当前点能不能落脚和标记的规则:
void MazeInitShortPathWithCycle(Maze* maze)
{
int map[MA