2014-01-12 124 views
3

我不小心将这个问题发布到了我的另一个帐户,所以我删除了该帖子并转发到此帐户。递归迷宫代

所以我想创造一个有趣的迷宫生成算法,但我碰到了一些凹凸。我写的算法放入无法访问并且没有退出的空间。问题是什么?

这里是我的意思

# # # # # # # # # # # # # # # # # # # # # 
# . . . . . # . # . . . # . # . # . . . # 
# . # # # . # . # # # . # # # . # # # # # 
# . . . # . # . # . . . . . # . . . . . # 
# # # . # . # . # # # # # . # # # . # # # 
# . . . # . # . . . . . # . # . # . # . # 
# . # # # . # # # # # . # # # . # . # . # 
# . # . # . . . . . # . . . . . . . # . # 
# . # . # . # # # # # # # . # # # . # # # 
# . # . # . . . . . . . # . . . # . # . # 
# . # . # # # # # # # . # . # . # # # . # 
# . # . # . . . . . . . # . # . # . . . # 
# # # # # . # # # # # # # . # . # . # # # 
# . # . . . # . . . . . . . # . # . # . # 
# . # # # . # . # # # # # # # # # . # # # 
# . . . # . . . # . # . . . . . . . # . # 
# # # . # # # . # # # # # # # . # # # . # 
# . # . # . . . . . # . . . # . . . . . # 
# # # . # . # # # . # . # # # . # # # . # 
# . # . . . # . # . # . # . . . . . # . # 
# # # # # # # # # # # # # # # # # # # # # 

这是我的代码
说明:
创建完全由连接细胞的迷宫。如上所述,1向下,2向右,3向左,orientTo记录dfs上/下/左/右是否到达当前单元格。 在mazeGen函数中:生成您来自的单元格,现在移除当前单元格和最后一个单元格之间的墙。生成当前单元格的所有邻居,并将它们随机排列成一个数组,数组保存x,y,以及dfs移动到哪个邻居单元格的方式。现在遍历这个数组并递归调用这些邻居值的dfs。

+2

为什么你有多个帐户? – Blorgbeard

+0

删除,您丢失了我的评论。我会再说一遍:我没有检查过哪些是错误的,但是你的“随机排列”可能会将相同的邻居放入多个位置,我怀疑这是你的意图。洗牌。 – keshlam

+0

这是一个意外,我是在程序员.stackexchange上,并且我按下了Facebook的登录信息,它创建了一个全新的帐户,然后这个帖子被迁移到这里。所以我刚删除它并重新发布。 – ultrainstinct

回答

2

我想迷宫空间(非墙壁)应该制作一棵树。这意味着,所有连接的空间在每对空间之间只有一条路径。

由于树没有循环,因此可以通过打破找到的任何循环来创建迷宫。可以通过查找周期(DFS)并将检测周期中的任何空间设置为墙,直到没有周期来完成。它可以在一个DFS传递中完成。通过选择不同的起始空间并随机选择邻居进行创建不同的迷宫。

+0

因此,基本上洪水填满所有的空间,如果一些部分没有被淹没,你选择一个随机的墙细胞,并打破它? – ultrainstinct

+0

是的,随机洪泛填充空间,如果填充发现已经泛滥的细胞,然后设置墙从填充进入淹没单元格的单元格开始 – Ante

+0

这看起来像是一个比迷宫生成算法更多的工作,是不是有办法将这种类型的逻辑合并到dfs中呢?就像它从来没有创建封闭空间。 – ultrainstinct