在康威的生命游戏中计算二维数组中的(8 个可能的)邻居
Counting (8 possible) neighbours in 2D array in conways Game Of Life
我必须计算每个单元格有多少个“活着”(在本例中是一个字符:'O')邻居。每个单元格有 8 个邻居。 (康威的“生命游戏”)
"正如您所注意到的,每个单元格有八个邻居。我们认为宇宙是周期性的:边界单元格也有八个邻居。例如:Neighbours from a "normal" cell
如果单元格位于右边界,则其右(东)邻居是同一行中最左边的单元格。
如果单元格是底部边界,则其底部(南)邻居是同一列中最上面的单元格。
角落单元格使用这两种解决方案。”When a cell is border and when a cell is a top corner
这些链接是关于如何在“异常”情况下检查单元格的可视化。
我在网上找到这个:
for (int x = -1; x <= 1; x += 1) {
for (int y = -1; y <= 1; y += 1) {
int r = i + y;
int c = j + x;
if (r >= 0 && r < n && c >= 0 && c < n
&& !(y == 0 && x == 0)
&& currentUniverse[i][j] == 'O') {
neighbours++;
}
然而这似乎并没有奏效......
我想不出一个整洁的代码,最重要的是 smart/handy/short 段代码来检查一个单元格在一个位置(假设 currentUniverse[i][j]
)有多少个活着的邻居......
有任何建议、技巧或其他帮助吗?
试一试。我使用 n 作为数组的大小(假设为正方形)。
int n = 4;
System.out.println();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int neighbours = 0;
for (int x = -1; x <= 1; x += 1) {
for (int y = -1; y <= 1; y += 1) {
if (!(y == 0 && x == 0)) {
int r = i + y;
int c = j + x;
//normalize
if (r < 0) r = n - 1;
else if (r == n) r = 0;
if (c < 0) c = n - 1;
else if (c == n) c = 0;
if (currentUniverse[r][c] == 0)
neighbours++;
}
}
}
System.out.print("\t" + neighbours);
}
System.out.println();
}
我必须计算每个单元格有多少个“活着”(在本例中是一个字符:'O')邻居。每个单元格有 8 个邻居。 (康威的“生命游戏”)
"正如您所注意到的,每个单元格有八个邻居。我们认为宇宙是周期性的:边界单元格也有八个邻居。例如:Neighbours from a "normal" cell
如果单元格位于右边界,则其右(东)邻居是同一行中最左边的单元格。 如果单元格是底部边界,则其底部(南)邻居是同一列中最上面的单元格。 角落单元格使用这两种解决方案。”When a cell is border and when a cell is a top corner
这些链接是关于如何在“异常”情况下检查单元格的可视化。
我在网上找到这个:
for (int x = -1; x <= 1; x += 1) {
for (int y = -1; y <= 1; y += 1) {
int r = i + y;
int c = j + x;
if (r >= 0 && r < n && c >= 0 && c < n
&& !(y == 0 && x == 0)
&& currentUniverse[i][j] == 'O') {
neighbours++;
}
然而这似乎并没有奏效......
我想不出一个整洁的代码,最重要的是 smart/handy/short 段代码来检查一个单元格在一个位置(假设 currentUniverse[i][j]
)有多少个活着的邻居......
有任何建议、技巧或其他帮助吗?
试一试。我使用 n 作为数组的大小(假设为正方形)。
int n = 4;
System.out.println();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int neighbours = 0;
for (int x = -1; x <= 1; x += 1) {
for (int y = -1; y <= 1; y += 1) {
if (!(y == 0 && x == 0)) {
int r = i + y;
int c = j + x;
//normalize
if (r < 0) r = n - 1;
else if (r == n) r = 0;
if (c < 0) c = n - 1;
else if (c == n) c = 0;
if (currentUniverse[r][c] == 0)
neighbours++;
}
}
}
System.out.print("\t" + neighbours);
}
System.out.println();
}