生成具有指定长度路径的迷宫

时间:2018-12-08 19:06:09

标签: algorithm

我的问题很简单,但很难做到。我有迷宫的大小和路径的长度。我需要找到完全指定长度的路径。但是,迷宫可以包含有效的较长路径。迷宫始终以[0,0]开始,以[size X,size Y]结尾。路径长度为13的5x5迷宫示例:( X :墙壁,-:路径)

---XX
XX-XX
---XX
-XXXX
-----

6x6迷宫,路径长度为11(包含另一条大小为15的路径)-有效

------
XX-XX-
---XX-
-XXXX-
-XXXX-
------

我已经尝试了许多算法,但是没有任何效果。如果有人可以给我一些提示,告诉我我需要做些什么,或者我可以在哪里读到有关此问题的信息,那就太好了。

1 个答案:

答案 0 :(得分:0)

首先将逻辑作为通用概念:从左上角开始,为单元格赋予0。 现在,对于与该单元格相邻的所有有效单元格,给它一个1。 继续向前移动,始终向各个方向移动,将单元格增加1。 当您位于右下角时,您的路线最短!

enter image description here

现在,我们需要研究方向性影响。当我们从右下角移开时,我们必须再次向前迈出一步来弥补这一点。因此,最小步长将为12,每个较大的路径将为p +2。在路径15中,我们从右下角移2步(步骤5和6),因此路径长度= 12 + 2 * 2 = 16。

生成迷宫必须有点随机,但同时应满足路径长度的要求。如果我们要从右下角移开一个以生成路径长度,则需要在向前方向(右下-下或右下-右-右)至少进行1 + 2个相同的移动。如果要移动2,则需要2 + 2,依此类推。

如果您确实想随机使用,则需要使用回溯,您可以尝试每种可能性,并检查是否仍然可以执行步骤。让我们以以下示例为例,我们需要14个步骤): 当我们放置7时,单元[2,3]和[4,3]被阻塞。当我们放置8时,单元[2,4],[2,5]和[3,5]被阻塞。现在没有空间可以左右移动,因此无法在[4,4]上放置8。 8可以放在[2,4]上。

enter image description here