平分迷宫的通道。将其变成单臂迷宫

问题描述 投票:0回答:1

问题

我有一个非常简单的迷宫(迷宫),我本质上想通过将贯穿迷宫的通道一分为二来使其尺寸加倍。这很难用语言解释,因此下面的图表显示了原始图像转换为我想要的结果:enter image description here

问题

自然,我有一个二维布尔数组,我必须将其大小加倍,但我发现要在不破坏迷宫的单手法则的情况下,甚至很难掌握如何进行缩放就很难了。

单曲面迷宫是没有任何连接和选择的迷宫。这只是很长的一段,这减慢了求解器到达终点的速度。

尝试

我最初的想法是找到一个通道节点(是一堵墙)的每个邻居,并将它们向外推2块瓷砖,然后再次在以前的纳特堡添加一堵墙。这只是导致了尴尬的科学怪人:

enter image description here

研究与资源

c# multidimensional-array scaling maze
1个回答
0
投票
  1. 步骤1是将迷宫中通道的大小增加三倍,而不增加壁的厚度。通过使每一个奇数行(从0开始计数)增加三倍,然后使每一个奇数列增加三倍,可以轻松实现这一点。

  2. 然后,在这个加倍的迷宫中填充所有没有填充邻居的像元。这会让您陷入一个大循环的迷宫。

  3. 然后,填充任何空白单元格以中断循环。将起点和终点放在此单元格的任一侧。

通道增加了三倍:

#########
#       #
#       #
#       #
#####   #
#       #
#       #
#       #
#########

填充没有填充邻居的单元格:

#########
#       #
# ##### #
#     # #
##### # #
#     # #
# ##### #
#       #
#########

中断循环:

#########
#s#e    #
# ##### #
#     # #
##### # #
#     # #
# ##### #
#       #
#########

注意,要获得令人愉悦的结果,您应该not从单臂迷宫开始。只要起始迷宫是一棵树,这就是从流行算法中得到的结果,结果将是单峰的。

[不幸的是,该算法只会在出口离开入口一格的地方产生迷宫。这似乎是您想要的,这很好,因为将它们放在迷宫的相对两侧比较棘手。

© www.soinside.com 2019 - 2024. All rights reserved.