使用"岛屿解决迷宫问题"

时间:2015-10-31 20:54:02

标签: algorithm pseudocode maze

我有一个迷宫的布局,我无法思考如何实现解决方案:

MazeToSolve.png

我知道迷宫解决算法有很多资源,例如http://www.astrolog.org/labyrnth/algrithm.htm但我不确定哪种算法最适合给定的迷宫。

有三个区域标有“*”,这是MazeSolver在能够从地图顶部的入口退出迷宫之前需要去的位置。

我很欣赏解码迷宫岛部分的伪代码。我会寻找一个简单的解决方案,最佳时间不是真正的问题。即使预先为解算器提供了迷宫的概述,但是当迷宫求解器实际上执行迷宫时它可能不完全准确,因此它比手动编码或使用无所不知的算法稍微复杂一点。迷宫的视图和需要的一半"如果你理解我的意思,人类/可行的......

虽然机器人/机器人程序员将获得每次救援的地雷图,但由于新的采矿或事件造成的损坏,地图可能已过时。

对于此应用,机器人首先需要找到所有救援区域并确定它们是否被占用。机器人必须完全自主。当对这些进行调查时,机器人应该检查人类的所有通道。

机器人也应该自我导航。虽然GPS系统是一种自然的选择,但在这种情况下,由于岩石天花板的厚度可以防止任何GPS信号,因此无法使用它,因此您还需要为机器人设计导航系统。为此,可以向机器人添加小的硬件改变,例如附加传感器或可部署的无线电信标。请注意,至少有一个避难所位于“岛屿”。

2 个答案:

答案 0 :(得分:0)

假设您没有寻找离开迷宫的最短路径 - 只需要任何路径,请为您的群岛创建一些订单:island1,island2,...,islandk

现在,假设您知道如何解决"常规"迷宫,你需要找到路径:

start->island1, island1->island2, ...., islandk->end

一些意见:

  • 解决"常规"迷宫可以使用BFSDFS完成(虽然后者不是最佳的。)
  • 如果您正在寻找更有效的解决方案,您可以使用 all-to-all shortest path而不是多个"常规"迷宫解决。
  • 如果您正在寻找最短路径,则此变体为Traveling Salesman Problem。讨论了可能的解决方案here
  • 如果您还要传递所有段落,可以使用DFS继续浏览,直到找到所有节点。同样,这不是最短路径,但找到最短路径将是NP-Hard。

答案 1 :(得分:0)

此问题与Travelling salesman problem问题有关,即NP-Hard问题,因此我不希望任何快速解决方案适用于大量岛屿。

对于少数岛屿,您可以这样做:对于每2个岛屿(包括您的起始位置),计算它们之间的最短路径。由于您对相对较低的顶点之间的距离感兴趣,我建议使用Dijkstra's algorithm,因为它相对容易并且可以手动完成(对于相当大的格拉夫)。

现在您拥有所有兴趣点之间的最短距离,并且您需要找到它们之间的哈密尔顿最优路径。幸运的是,距离满足度量,因此您可以使用2近似(简单,甚至手动)或甚至3/2近似(不那么简单)算法,但不知道多项式算法。

对于3个岛屿的完美解决方案,您只需要检查6种方式(简单),但对于6个岛屿,您可以通过720种方式访问​​它们,n可以访问n!所以祝你好运。