<> John Conway的生命游戏 - 规则集
- 任何活着的邻居少于两个的活细胞都会死亡,好像是由人口不足造成的。
- 任何有三个以上活着的邻居的活细胞都会死亡,就像过度拥挤一样。
- 任何有两三个活邻居的活细胞都会留在下一代。
- 任何有三个活邻居的死细胞都会成为活细胞。
醇>
在过去的几个小时里,我一直在努力实施John Conway的C生命游戏。我尝试做的是在连续K次迭代后显示电路板的状态。作为输入,我使用二维数组的行数(int n)和列(int m),数组的组件(1表示实时,0表示死亡)和生成数(K)。 / p>
我已成功使用飞机方法成功实施游戏。
您可以在左侧网格中看到的平面方法是什么意思,我们在那里检查黑框的邻居到N,NW,S,SW等等。我的算法适用于此,即生活&#39;功能看起来像这样。为了实现这一点,我用零填充了边缘线/列。
void life(int a[100][100],int n,int m) {
//Copies the main array to a temp array so changes can be entered into a grid
//without effecting the other cells and the calculations being performed on them.
int count;
copy(a, temp, n ,m);
for(int i = 1 ; i <=n ; i++) {
for(int j = 1; j <= m; j++) {
count = 0;
count = a[i-1][j] + a[i][j-1] + a[i+1][j] + a[i][j+1] + a[i-1][j+1]
+ a[i+1][j-1] + a[i-1][j-1] + a[i+1][j+1];
//The cell dies.
if(count < 2 || count > 3)
temp[i][j] = 0;
//The cell stays the same.
if(count == 2)
temp[i][j] = a[i][j];
//The cell either stays alive, or is "born".
if(count == 3)
temp[i][j] = 1;
}
}
//Copies the completed temp array back to the main array.
copy(temp, a, n ,m);
}
但是在第二个网格上,我们注意到每个框都有八个邻居,无论它在地图上的位置如何。为了以这种方式检查所有邻居,我应该使用环形方法。
但是我无法理解这个概念,我的意思是我明白了什么是torrus,但是我无法找到一种方法来实现并在代码中编写一个检查功能... < / p>
有人说,有人可以解释如何思考,也许可以写出这样的方法吗?
答案 0 :(得分:5)
在处理您不了解的问题时,首先尝试解决更简单的问题通常更容易。
在生命游戏中,你有一个二维网格。如果我们通过只有一个维度来简化事情会怎么样?如果您只有一行而不是网格怎么办?你将如何处理行邻居的第一个和最后一个元素?