Algorithm 通过迷宫的算法

Algorithm 通过迷宫的算法,algorithm,maze,Algorithm,Maze,我们目前正在编写一个游戏,它是一种相当未知的语言:modula 2, 我们遇到的问题是:我们有一个迷宫,而不是一个17 x 12网格中的完美迷宫。计算机必须生成从起点9,12到终点9,1的路径。我找到了一些算法,但当机器人必须返回时,它们不起作用: xxxxx x => x x xxx 或: 我为第一种示例类型找到了解决方案,但第二种类型无法解决,而我为第二种类型制定的解决方案会导致机器人陷入第一种情况 它包含大量代码,因此我将给出以下想法: 当未到达目的地时,请执

我们目前正在编写一个游戏,它是一种相当未知的语言:modula 2, 我们遇到的问题是:我们有一个迷宫,而不是一个17 x 12网格中的完美迷宫。计算机必须生成从起点9,12到终点9,1的路径。我找到了一些算法,但当机器人必须返回时,它们不起作用:

xxxxx
    x
=>  x
    x
  xxx
或:

我为第一种示例类型找到了解决方案,但第二种类型无法解决,而我为第二种类型制定的解决方案会导致机器人陷入第一种情况

它包含大量代码,因此我将给出以下想法:

当未到达目的地时,请执行以下操作{ 试着向右走,如果没有什么阻碍你:向右走 如果你遇到障碍,试着向上走,直到你能向右走;如果你不能再向上走,试着向下走,直到你能向右走,从你第一次被障碍的地方开始;如果你不能再向下走,试着向左走一步,用障碍填充你测试的空间。 }

这适用于第一类问题。。。第二次就不行了。 现在可能是我开始的时候出错了,所以我对更好的算法或解决方案持开放态度,特别是如何改进我的算法


非常感谢

我想我记得你的算法只有在你通过入口进入迷宫、抱住墙壁并试图走出迷宫时才起作用。例如,如果你在迷宫中间的一个岛上开始,它就不起作用。 看一看。这也将为您提供到您想要去的任何单元格的最短路径。基本上,这个想法是,你不想访问同一个细胞两次,没有理由这样做,从每个细胞你分支

第一个例子。您可能可以识别模式,数字是从箭头开始到达每个单元格所需的步骤数

xxxxx
3212x
2101x
3212x
43xxx
当然,如果您愿意,您可以通过跟踪每个单元格上一条通向此单元格的最佳路径来重建所采用的路径


宽度优先搜索假定每个网格单元之间的距离为常数。如果相邻单元之间的距离不同,您可以看看这类问题:。

我想我记得您的算法只有在您通过入口进入迷宫、拥抱墙壁并尝试走出迷宫时才起作用。例如,如果你在迷宫中间的一个岛上开始,它就不起作用。 看一看。这也将为您提供到您想要去的任何单元格的最短路径。基本上,这个想法是,你不想访问同一个细胞两次,没有理由这样做,从每个细胞你分支

第一个例子。您可能可以识别模式,数字是从箭头开始到达每个单元格所需的步骤数

xxxxx
3212x
2101x
3212x
43xxx
当然,如果您愿意,您可以通过跟踪每个单元格上一条通向此单元格的最佳路径来重建所采用的路径


宽度优先搜索假定每个网格单元之间的距离为常数。如果相邻单元之间的距离不同,您可能会看到这类问题:。

您可能需要实现路径查找算法,因为您不仅要找到任何一条路,还想找到可能的最短路径。最流行的路径查找算法是和。如果您知道整个迷宫的布局,它将为您提供从一个点到另一个点的最短路径。

您可能需要实施路径查找算法,因为您不仅想要找到任何路径,还想要找到可能的最短路径。最流行的路径查找算法是和。如果您知道整个迷宫的布局,它将为您提供从一点到另一点的最短路径。

您试图解决的问题称为寻路。有很多方法,从简单的暴力到惊人的暴力。Wikipedia有一个非常好的概述。

您试图解决的问题称为寻路。有很多方法,从简单的暴力到惊人的暴力。维基百科有一个很好的概述。

你把这个问题看作是一个正在经历迷宫的角色。我不会那么做的。我会把迷宫想象成一系列的隧道,水从其中流过,这意味着答案将流向各个方向。因此,如果你将迷宫表示为一个2空间的字符串数组,用null或其他字符作为墙,一个不同的分隔符作为未被发现的位置,用“o”,其余的用“n”、“e”、“s”和“w”作为到达该正方形的最短路径。然后,迭代一个循环,每次,每个方块都会查看它是否可以扩展到另一个方块,如果这个方块中有一个“o”,那么它会将该方块的字符串的连接版本添加到下一个方块,其中字符表示到达该方块所需的移动。当你找到终点广场时,你就完成了。

你在想什么 作为一个穿越迷宫的角色的问题。我不会那么做的。我会把迷宫想象成一系列的隧道,水从其中流过,这意味着答案将流向各个方向。因此,如果你将迷宫表示为一个2空间的字符串数组,用null或其他字符作为墙,一个不同的分隔符作为未被发现的位置,用“o”,其余的用“n”、“e”、“s”和“w”作为到达该正方形的最短路径。然后,迭代一个循环,每次,每个方块都会查看它是否可以扩展到另一个方块,如果这个方块中有一个“o”,那么它会将该方块的字符串的连接版本添加到下一个方块,其中字符表示到达该方块所需的移动。当你找到终点广场,你就完了