C语言中迷宫生成算法的细微缺乏随机性

Fer*_*yll 1 c random algorithm debugging maze

这涉及我只能猜测的是用于生成随机迷宫的某人代码中的缺陷.代码有点长,但大部分都是注释掉的选项和/或没有特别关注随机化.

我得到了2001x2001迷宫从链接dllu竖起并保存为PNG 这里.从那以后,我创造了这个.为了获得蓝色图案,我开始从迷宫的左下角开始填充死角.根据他使用的回溯算法,这就是迷宫开始产生的点:所以如果你跟踪由此产生的死角的踪迹,你可以系统地填充迷宫那一侧的所有死角.换句话说,中心蓝色质量表示从左下角开始直到2678 x 1086处的唯一前沿像素的总可访问区域.

但是有一些东西立即异常,因为蓝色的"分形"似乎重演了.实际上,通过覆盖分形的一部分,旋转和镜像,您可以看到形状的确切对应.这个叠加层的另一个异常将一个大陆的一部分映射到另一个大陆,但奇怪的是这次只有一块大陆.显然这些不是唯一的自动对应.

但是除了死端组件的形状之外,当你放大时,墙壁的实际图案会重复出来.最奇怪的是,重复并不精确,但只有50-60%的墙壁对应.放大和区域的样本:

明亮区域表示同构,黑暗区域表示缺乏同构

问题很简单,代码中是什么造成了这种模糊的随机性缺失?

Pau*_*kin 6

标准库函数rand通常可怕地实现,并且您的代码正在进行rand()%4,这会加剧问题,因为较差的实现往往在较低位中具有更少的随机性.尝试rand使用其他随机数生成器替换.