我的查询很难描述,所以我会尽量简洁地解释它。算法 - 有关Conways的极端细节生活游戏
在康威生命游戏,让我们说我有一个地图,像这样:
_ _ _ _ _
_ _ _ _ _
U _ R Y _
_ T _ X _
_ Z _ C _
相反遍历每一个细胞,包括死者那些不可能成为相关的,比方说我把每一个生命第0代的细胞在LinkedList
之内。在每一代更新之后,我会遍历整个LinkedList
并执行Conway的生命游戏在其中的每个规则上的规则。这样我就可以避免无缘无故地迭代大量死亡单元。
其中一个规则状态为a dead cell with 3 living neighbors becomes living
。由于我只是在迭代生活细胞在我的算法,只有我可以看死细胞的方式是通过查看我的LinkedList
中的活细胞的邻居。我必须为我的LinkedList
中的每个项目遍历所有相邻的单元格到该单元格,并且对于每个相邻的单元格,我必须查看该单元格,计算它是否有三个邻居,然后将其设置为alive
,然后添加它作为LinkedList
内的活细胞。
我的问题:
显然,我的LinkedList
将很快得到杂乱无章,将不是在左上角 - >右下角的顺序了。在上面提供的图例中,我的linkedList
中的第一个单元可能是C
,第二个单元可能是R
,第三个单元可能是T
。随着新细胞诞生我会以任何顺序,他们在加入下一代将它们添加到我的LinkedList
和遍历他们。
是由游戏的规则,这一法律,或者我需要通过迭代整个二维数组从左上角到右下角?规则难以置信地模糊。
任何有两个以上活的邻居的活细胞都会死亡,好像是由于人口不足造成的。
任何有两个或三个活的邻居的活细胞都活在下一代。
任何有三个以上活着的邻居的活细胞都会死亡,好像是由于人口过多一样。
任何具有正好三个活的邻居的死细胞变成活细胞,就像通过繁殖一样。
我需要遍历整个二维数组,做规则:
少于两只活邻居去世的任何活细胞,仿佛引起下人口。
然后通过整个二维数组再次循环,做规则:
有两个或三个邻居住任何活细胞生命到下一代。
它到底有什么关系吗?我读过这么多的帖子,似乎没有人提过这个话题。
谢谢。
该规则强加了评估顺序。他们所需要的是双缓冲。目前这一代存在于一个缓冲区中,您将下一代构建到不同的缓冲区中。请注意,尽管只有少数活细胞时您的算法会很有效,但当大部分细胞处于活动状态时,其效率会非常低下。 – user3386109
如果你从上到下工作,你只需要一行作为缓冲区(而不是空白字段)。 – MrSmith42
@ MrSmith42 - 只要你以某种线性方式遍历,我认为它很好,你只需要缓冲前一行。好主意! –