зацикливание 2D-массива (диагональ) Переполнение стека

Итак, я инициализировал массив как массив [8] [8], давайте предположим, что я нахожусь в точке (строка, столбец) и, например, это строка 4 столбца 4, и я хочу перебрать все диагональные направления (юго-восток, юго-запад, северо-восток, северо-запад)

8 * 8 Array

поэтому я написал 4 разные функции для проверки каждого направления в отдельности, и вот пример для Северо-Востока

for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
if(array[i - 1][j+1] == 'x')
{
count = count + 1;
}

Есть ли способ сделать петлю во всех диагональных направлениях одновременно?
Другая проблема заключается в том, что если вы выходите за границы, например, если точка равна (7,7), то на северо-востоке не будет никакого значения, потому что оно превысит массив границ массива [6] [8], а это вне массива. границы. Как я могу справиться с этой проблемой? или компилятор возвращает ошибку, когда это происходит?

0

Решение

Вы можете, конечно, проверить в каждом направлении, например,

for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
if (check_north_east(array, i, j))
++count;

if (check_north_west(array, i, j))
++count;

if (check_south_east(array, i, j))
++count;

if (check_south_west(array, i, j))
++count;
}
}

Компилятор с удовольствием выйдет за пределы массива. Поэтому вы должны убедиться, что код не сделает этого, и проверить себя

const int NROWS = 8, NCOLS = 8;
bool check_north_east(char array[][NCOLS], int row, int col)
{
if (row <= 0 || col >= NCOLS - 1)
return false;

return array[row - 1][col + 1] == 'x';
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector