【问题标题】:Bisecting passages of a perfect maze. Turning it into a unicursal maze将完美迷宫的通道一分为二。把它变成一个单行迷宫
【发布时间】:2020-09-26 00:19:14
【问题描述】:

问题

我有一个非常简单的迷宫(迷宫),我基本上想通过将穿过它的通道一分为二来将其扩大一倍。这对我来说很难用语言来解释,所以这里有一张图表,显示了原始转换为我想要的结果:

问题

当然,我有一个 2D 布尔数组,我必须将其大小翻倍,但我发现很难掌握如何在不破坏迷宫的统一规则的情况下进行这种缩放?

单行迷宫是没有任何连接点和选择的迷宫。这只是一个很长的通道,它会减慢求解器到达终点的速度。

尝试

我最初的想法是找到作为墙壁的通道节点的每个邻居,并将它们向外推 2 个瓷砖,然后在之前邻居所在的位置再次添加一堵墙。这只是导致了这个令人尴尬的科学怪人:

研究与资源

【问题讨论】:

    标签: c# multidimensional-array scaling maze


    【解决方案1】:
    1. 第 1 步是将迷宫中通道的大小增加三倍,而不会增加墙壁的厚度。这很容易通过将每个奇数行(从 0 开始计数)增加三倍,然后将每个奇数列增加三倍来实现。

    2. 然后,填充这个双重迷宫中没有填充邻居的每个单元格。这会给你一个大循环的迷宫。

    3. 然后,填充任何空单元格以中断循环。将开始和结束放在此单元格的任一侧。

    段落增加了两倍:

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

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

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

    打破循环:

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

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

    不幸的是,这个算法只产生出口离入口一个空间的迷宫。这似乎是您想要的,这很好,因为将它们放在迷宫的相对两侧是很棘手的。

    【讨论】:

    • 好的,这是有道理的。只有一个部分让我感到困惑,我不确定如何在 2D 阵列上实现。是这样的:That is easily accomplished by tripling every odd-numbered row (counting from 0), and then tripling every odd-numbered column. 为什么每个奇数?
    • 偶数列包含垂直墙,偶数行包含水平墙。你不想增加这些,因为你不想让墙变厚。
    • 那不只适用于当前的迷宫吗?如果生成了不同配置的迷宫,它就不能正常工作?例如有些奇怪的行有墙,有些则没有。
    • 奇数行只有垂直的墙。当您将奇数行增加三倍时,垂直墙会变得更长,而不是更厚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2022-10-14
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多