我有一个非常简单的迷宫(迷宫),我本质上想通过将贯穿迷宫的通道一分为二来使其尺寸加倍。这很难用语言解释,因此下面的图表显示了原始图像转换为我想要的结果:
自然,我有一个二维布尔数组,我必须将其大小加倍,但我发现要在不破坏迷宫的单手法则的情况下,甚至很难掌握如何进行缩放就很难了。
单曲面迷宫是没有任何连接和选择的迷宫。这只是很长的一段,这减慢了求解器到达终点的速度。
我最初的想法是找到一个通道节点(是一堵墙)的每个邻居,并将它们向外推2块瓷砖,然后再次在以前的纳特堡添加一堵墙。这只是导致了尴尬的科学怪人:
步骤1是将迷宫中通道的大小增加三倍,而不增加壁的厚度。通过使每一个奇数行(从0开始计数)增加三倍,然后使每一个奇数列增加三倍,可以轻松实现这一点。
然后,在这个加倍的迷宫中填充所有没有填充邻居的像元。这会让您陷入一个大循环的迷宫。
然后,填充任何空白单元格以中断循环。将起点和终点放在此单元格的任一侧。
通道增加了三倍:
#########
# #
# #
# #
##### #
# #
# #
# #
#########
填充没有填充邻居的单元格:
#########
# #
# ##### #
# # #
##### # #
# # #
# ##### #
# #
#########
中断循环:
#########
#s#e #
# ##### #
# # #
##### # #
# # #
# ##### #
# #
#########
注意,要获得令人愉悦的结果,您应该not从单臂迷宫开始。只要起始迷宫是一棵树,这就是从流行算法中得到的结果,结果将是单峰的。
[不幸的是,该算法只会在出口离开入口一格的地方产生迷宫。这似乎是您想要的,这很好,因为将它们放在迷宫的相对两侧比较棘手。