迷宫求解算法。复杂的迷宫

时间:2012-03-21 14:46:04

标签: algorithm maze

我发现了几种解决迷宫的算法。那些足够简单的东西只适用于出口位于外边界的情况下(Wall-follower,承诺......)。

当边界的形状是随机的,区域成本不等并且出口可能在迷宫内某处时,是否有一些更复杂的算法? (顺便说一下,所有元素都是二次的)

更新:另外,我们不知道apriori迷宫的样子,只能看到某个区域。

3 个答案:

答案 0 :(得分:4)

如果你的意思是“正常的”二维迷宫,就像人们可以在纸上找到的那样,你可以解决它们using image analysis。但是,如果你以某种方式找到 (2D / 3D)迷宫本身并且应该找到出路,你应该部署一些Machine learning技术。如果你不知道你的迷宫究竟是什么样的,那么这是有效的,a.k.a。你只能“看到”它的一部分。

更新:除了最短路径查找器算法系列之外,我还可以将所谓的Trémaux算法设计为能够被人类使用<强>迷宫里面。它类似于一个简单的递归回溯器,可以找到所有迷宫的解决方案。

说明

  

当你走下一条通道时,在你身后画一条线来标记你的路径。当你遇到一个死胡同转身然后回到你来的路上。当您遇到之前没有访问过的路口时,请随机选择一个新的段落。如果你走下一条新的通道并遇到一个你曾经去过的路口,把它当成死路一样,然后回到你来的路上,这样你就不会绕圈或丢失通道。如果沿着您之前访问过的一条通道(即标记一次)并遇到一个交叉点,可以选择任何新通道,否则请选择“旧”通道。每个段落都将为空(如果尚未访问),标记一次或标记两次(如果您被迫回溯)。当您到达解决方案时,标记一次的路径将指示直接返回到开始的路径。如果迷宫没有解决方案,你会发现自己回到了开始时所有标记为两次的段落。

答案 1 :(得分:2)

无论出口在哪里,

Shortest path算法都会找到退出的最短路径。

如果费用相等 - BFS会这样做 - 否则,您需要dijkstra's algorithmA* algorithm [基本上是知情的dijkstra]来找到最短路径。

要使用这些算法,您需要将迷宫建模为图表:G=(V,E)其中V = { all moveable squares in the maze }E = {(u,v) | you can move from u to v in a sinlgle step }

如果方块的费用为每平方cost(v),则需要加权函数:w:E->R:将其定义为w(u,v) = cost(v)

答案 2 :(得分:1)

Pledge算法对你所说的那种迷宫非常有用。它包括:

选择一个方向,如果你知道目标良好的总体方向,但随机方向就可以。假设你选择北方。

走向那个方向直到遇到障碍物。

跟踪障碍物,跟踪你的转弯量。例如,往北走,你会遇到东西墙。你转向东(90d),然后沿着墙转向南(180d),西(270d)和北(360d)。你不会停止跟随墙壁,直到你转动的数量变为0.所以你继续跟随它转向西方(270d转向相反方向),南方(180d),东方(90d),最后是北方(0d) 。现在你可以停止关注了。

任何时候遇到障碍都会这样做。你最终将到达迷宫的北部大部分地区。如果你还没有找到目标,因为你选择了错误的方向,请再次尝试东方或南方或任何最接近目标的方向。

相关问题