使用c ++递归地解决迷宫,无法处理异常情况

时间:2014-05-25 06:48:08

标签: c++

我正在使用我在网上找到解决迷宫的算法。

FIND-PATH(x, y)

if (x,y outside maze) return false
if (x,y is goal) return true
if (x,y not open) return false
mark x,y as part of solution path
if (FIND-PATH(North of x,y) == true) return true
if (FIND-PATH(East of x,y) == true) return true
if (FIND-PATH(South of x,y) == true) return true
if (FIND-PATH(West of x,y) == true) return true
unmark x,y as part of solution path
return false

该算法适用于大多数迷宫。但它无法处理异常:

######
#s.  #
#.## #
#.####
#...f#
######

如图所示,#是一个墙,空的空间是可用路径,s是开始,f是结束。 并且'。'虚线是运行迷宫解决程序后标记的解决方案路径。

在这种情况下,起点将路径阻塞为双向,并且在运行程序后,起点右侧有一个额外的点,无法取消标记。

我想知道是否有人可以指出为什么会出现上述算法。我应该在solve()函数中添加哪些额外的检查?谢谢!

1 个答案:

答案 0 :(得分:1)

问题可能正在发生,因为您正在重新访问已访问过的节点。

考虑到你在功能开始时考虑的额外点。现在在你的西侧你可能错过了检查它是否是一个起点,并考虑起点不是外部迷宫和可用路径。所以现在程序再次从开始开始检查,从而给出假阳性结果。

虽然没有实际代码但很难调试。

编辑:上面正在讨论确实存在的问题

你知道起点在哪里吗?如果是这样的话

替换

if (ch =='.' || ch == '#')
         return false;

if (ch =='.' || ch == '#' || ch=='s')
         return false;