【问题标题】:Solving maze with "islands"用“岛屿”解决迷宫
【发布时间】:2015-10-31 20:54:01
【问题描述】:

我有一个迷宫的布局,我在思考如何实施解决方案时遇到了麻烦:

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

标有“*”的三个区域是 MazeSolver 从地图顶部的入口退出迷宫之前需要到达的位置。

我很欣赏解决迷宫岛部分的伪代码。我会寻找一个简单的解决方案,最佳时间并不是真正的问题。问题是即使事先向求解器提供了迷宫的概述,但在迷宫求解器实际执行迷宫时可能并不完全准确,因此它比事先编码或使用使用全知的算法复杂一些迷宫的观点,如果你明白我的意思,需要“一半”人类/可行......

虽然每次救援都会向机器人/机器人程序员提供矿井地图,但该地图可能由于新的采矿或事件造成的损坏而过时。

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

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

【问题讨论】:

  • 除非您知道“岛屿”的精确位置,否则无论如何您都必须在整个图表中进行暴力搜索,因此您使用什么算法并不重要。为了简单起见,我建议使用 DFS
  • 好吧,假设岛屿的位置已经给出,我的意思是有些通道可能会被阻塞。
  • 迷宫是如何分配给你的程序的?描述输入格式。
  • 好吧,我给点上下文

标签: algorithm pseudocode maze


【解决方案1】:

假设您不是在寻找走出迷宫的最短路径 - 只是任何路径,为您的岛屿创建一些顺序:island1,island2,...,islandk。

现在,假设您知道如何解决“常规”迷宫,您需要从以下位置找到路径:

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

一些cmets:

  • 可以使用BFS 或DFS 解决“常规”迷宫问题(虽然后者不是最佳选择)。
  • 如果您正在寻找更有效的解决方案,您可以使用 all-to-all shortest path 而不是多个“常规”迷宫解决方案。
  • 如果您正在寻找最短路径,这是Traveling Salesman Problem 的变体。可能的解决方案已在here 讨论。
  • 如果您还想通过所有通道,您可以使用DFS 来完成,直到发现所有节点。同样,这不会是这样的最短路径,但找到最短路径将是 NP-Hard。

【讨论】:

  • 我怎样才能用这个检查所有的段落
  • @BillBo 如果您需要检查所有段落,则需要进行 DFS,并遵循它直到发现所有段落。如果您正在寻找最短的此类解决方案 - 这将是一个问题,因为它基本上是旅行推销员的变体。
【解决方案2】:

这个问题与Travelling salesman problem 问题有关,它是NP-Hard,所以我不希望有任何针对大量岛屿的快速解决方案。

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

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

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

【讨论】:

  • 未加权图中不需要 Dijsktra 算法。
  • @amit 我假设边缘是由道路长度加权的。
猜你喜欢
  • 2014-05-07
  • 2019-02-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
相关资源
最近更新 更多