英文:
Counting (8 possible) neighbours in 2D array in conways Game Of Life
问题
我必须计算每个单元格周围有多少个“活着”的邻居(在这种情况下是字符:'O')。每个单元格有8个邻居。(这是康威的“生命游戏”)
“正如您可以注意到的,每个单元格都有八个邻居。我们将宇宙视为周期性的:边界单元格也有八个邻居。例如:来自“正常”单元格的邻居
如果单元格位于右边界,则其右(东)邻居是同一行中最左边的单元格。
如果单元格位于底边界,则其下(南)邻居是同一列中最顶部的单元格。
角落单元格使用两种解决方案。”单元格何时是边界以及何时是顶部角落
这些链接是有关如何在“异常”情况下检查单元格的可视化。
我在互联网上找到了这个代码:
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++;
}
然而,这似乎不起作用...
我想不出一个整洁而且最重要的是聪明/方便/简短的代码片段来检查一个位置(比如说 currentUniverse[i][j]
)上的单元格有多少个活着的邻居...
有人有建议、提示或其他帮助吗?
英文:
I have to count how many "alive" (in this case a char: 'O') neigbours each single cell has. Every cell has 8 neighbours. (It is for "The Game Of Life" from Conway)
"As you can notice, each cell has eight neighbors. We consider the universe to be periodic: border cells also have eight neighbors. For example: Neighbours from a "normal" cell
If cell is right-border, its right (east) neighbor is leftmost cell in the same row.
If cell is bottom-border, its bottom (south) neighbor is topmost cell in the same column.
Corner cells use both solutions." When a cell is border and when a cell is a top corner
The links are visualizations to how to check the cells in cases of "exceptions".
I found this on the internet:
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++;
}
However that did not seem to work...
I can not come up with a tidy and most of all smart/handy/short piece of code to check how many alive neighbours a cell at a position (let's say currentUniverse[i][j]
) has...
Has anyone suggestions, tips or some other help?
答案1
得分: 0
给这个一个尝试。我使用 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();
}
英文:
Give this one a shot. I am using n as the size of the array (assumes in square).
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();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论