约翰·康威';s人生游戏-C语言的基本实现
约翰·康威的人生游戏——一套规则约翰·康威';s人生游戏-C语言的基本实现,c,arrays,algorithm,C,Arrays,Algorithm,约翰·康威的人生游戏——一套规则 任何少于两个活邻居的活细胞都会死亡,就好像是由于人口不足 任何一个有三个以上邻居的活细胞都会死亡,就好像过度拥挤一样 任何有两个或三个活邻居的活细胞都会延续到下一代 任何有三个活邻居的死细胞都会变成活细胞 在过去的几个小时里,我一直致力于用C语言实现约翰·康威的生命游戏。我想做的是在K个连续迭代之后显示一个板的状态。作为输入,我使用二维数组的行数(int n)和列数(int m)、数组的组成部分(1表示活动,0表示死亡)和代数(K) 我已经成功地实现了使用平面方
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);
}
无效寿命(int a[100][100],int n,int m){
//将主阵列复制到临时阵列,以便将更改输入网格
//不影响其他单元格以及对其执行的计算。
整数计数;
副本(a、临时、n、m);
对于(int i=1;i来说,当你处理一个你不理解的问题时,首先尝试解决一个更简单的问题往往更容易
在生活游戏中,你有一个二维网格。如果我们只使用一个维度来简化事情会怎么样?如果你只有一行而不是网格会怎么样?你将如何处理使行的第一个和最后一个元素相邻的问题?试着使用%
操作符来绕过限制:x%=100
将变成 100
into0
,101
into1
等。在数组索引中使用模运算符:a[i-1][j+1]
-->a[(i+n-1)%n][(j+m+1)%m]
否决票似乎是最不公平的,如果我的部分帖子不充分,为什么不发表一些智慧,并建议我如何改进它?首先,你的第一个平面方法真的有效吗?在我看来,你好像是在阅读数组索引[100]和[101]这是不存在的。我假设n
和m
为100。一旦你确定了平面进近边缘的情况,你可能会想到如何处理环绕(圆环)情况。(在涉及编程(语言)的标题/标题中,不要轻易使用:)这既不是对问题的批评,也不是要求澄清。这是对这个问题以及OP未来可能面临的许多其他问题的一个很好的回答。感谢你和其他人的努力解释,但我仍然不明白。我只是不能把我的心放在这个环形方法上,这非常令人沮丧。让我来我们再进一步尝试帮助你理解它。也许做一些物理的事情会有所帮助。拿一张8 x 11英寸的纸,撕成一条窄条。现在在窄条上画9条垂直线,并用索引号填充线之间的空间,从0开始。这表示10个元素的一维数组。你如何重新安排论文,使所有的元素都是相邻的?我不是直接给你答案,因为我认为如果你从我给你的东西中找出它,你会更好地理解环面方法。