如何生成具有固定进入和退出点的迷宫?

时间:2016-09-02 20:47:12

标签: python depth-first-search maze

我已经阅读了有关创建和解决迷宫的深度优先搜索算法。但是,我没有找到任何关于创建具有固定进入和退出的迷宫的内容。在每个迷宫上,条目始终为(0,1),两端的对侧出口。

在迷宫的产生过程中,应该访问每个单元格(以产生尽可能多的死角)但是出口应始终在同一点。

生成的迷宫的解决方案路径如下所示:

enter image description here

或者这个:

enter image description here

1 个答案:

答案 0 :(得分:1)

我在使用广度优先搜索之前已经制作了基于网格的迷宫,但是可以从深度优先搜索设计类似的算法。

首先我创建一个graph,其中坐标图中的每个节点都链接到节点的上,下,左和右。例如,节点(1,1)具有到(0,1),(1,0),(2,1)和(1,2)的边。边缘节点将只有3个边缘,而角落节点只有2个边缘,因为相应方向的邻居不存在。在生成这些边时,请为每个边分配一个随机权重。当我实现它时,我发现[0,100]的范围很好,但你可以调整它。最后,您可以从所需的起始节点到所需的结束节点执行深度优先搜索,然后只需跟踪路径即可。如果你向下移动一条边缘,将你连接到你已经访问过的节点,那么就不要在那里画边。那会给你一些看起来迷宫般的东西。

当我这样做时,我实际上以相同的方式设置了图形,但是我使用Prim's Algorithm来代替DFS来计算该图的最小生成树。这给了我一些看起来迷宫般的东西,至少触摸过一次每个节点,并且不包含任何循环。然后我可以指定我想要作为起点和终点的任何点,并且迷宫将不包含任何周期,并且任何2点之间恰好有1条最短路径。我在其上添加了用于编辑迷宫,删除死角,以3D渲染等的工具,但这些超出了你的问题的范围。

如果你想看看我是怎么做的,请在GitHub上check out my project。 " Minotaur"文件夹包含可执行文件(Frankenstein的Python,C ++和C#的怪物),源代码也在那里。 maze generation part is in this fileyou can view the project on my portfolio

我知道你在Python中要求这个,但我现在忙于对我的C ++代码进行逆向工程,我希望你仍然觉得这个答案很有帮助。

编辑: 我几乎忘了我制作了一个精彩的视频来展示它,所以如果你想看到它在行动但不想编译我的来源或不信任我的可执行文件How I would like the bounds to be