Я пытаюсь посчитать и обновить соседей ячейки с ненулевыми значениями. Так что слева, справа, сверху, снизу, сверху слева ...
В любом случае все восемь направлений и сама клетка.
int grid[100][100];
int genNeibrs(int x, int y, int n, int m)
{
m--;
n--;
int c = 0, xs = ((x - 1) < 0) ? 0 : (x - 1),
xe = ((x + 1) > n) ? n : (x + 1),
ys = ((y - 1) < 0) ? 0 : (y - 1),
ye = ((y + 1) > m) ? m : (y + 1);
for (auto i = xs; i <= xe; i++)
{
for (auto j = ys; j <= ye; j++)
{
if (grid[i][j])
++c;
}
}
return c;
}
void getGrs(int n, int m)
{
for (auto i = 0; i < n; i++)
{
for (auto j = 0; j < m; j++)
if (grid[i][j])
{
int q = genNeibrs(i, j, m, n);
if (q)
grid[i][j] = q;
}
}
}
Здесь значение q становится 0 для последовательных итераций, отличных от 0,0 для
grid = {{1, 0, 1, 1, 0, 1, 1, 1, 1, 0 <repeats 91 times>}, {0, 0, 0, 1, 0, 1, 0, 0, 1, 0 <repeats 91 times>}, {0 <repeats 100 times>} <repeats 98 times>}
, m и n равны 9 и 2 соответственно.
При отладке с помощью gdb функция genNeibrs
возвращается, как и ожидалось, но после выполнения мне удалось зафиксировать ее в строке, где инициализируется q. Он как-то инициализируется до нуля, даже если не должен.
Так что я делаю не так?
Ожидаемое значение grid = {{1, 0 ,3 ,3 ,0, 3, 4, 5, 3, 0 <repeats 91 times>},{0, 0, 0, 3, 0, 3, 0, 0, 3, 0 <repeats 91 times>}, {0 <repeats 100 times>} <repeats 98 times>}
В любом случае значения сетки не меняются.