Как проверить, существует ли массив [i] [j] в c ++?

У меня есть двумерный массив символов, где все числа, кроме одного * (как показано на рисунке (два примера)
введите описание изображения здесь

Моя задача — суммировать все соседние целые числа (в примере 1 соседи * равны 4,2,5,8, а сумма равна 4 + 2 + 5 + 8 = 19).
Но в примере 2 * не имеет Топ сосед.

Мой начальный код был похож на:

arr[i-1][j] + arr[i+1][j] + arr[i][j-1] + arr[i][j+1]

Но потом я понял, что в случае, как а [0] [- 1] не существует Так что вы можете помочь мне решить мою проблему

-1

Решение

Вы должны явно проверить каждый. Следующее должно работать:

bool inRange(int i, int j) {
const auto n = 4;   // you need to set this somewhere, or pass it in
return (i >= 0) && (i < n) && (j >= 0) && (j < n);
}

auto sum = (inRange(i-1, j) ? arr[i-1][j] : 0)
+ (inRange(i+1, j) ? arr[i+1][j] : 0)
+ (inRange(i, j-1) ? arr[i][j-1] : 0)
+ (inRange(i, j+1) ? arr[i][j+1] : 0);

Вы, вероятно, можете написать это немного чище, но вам нужно проверять не только -1, но и время, когда вы идете больше 3.

2

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

У этой проблемы может быть несколько решений, но если вы хотите избежать проверки границ каждый раз, вы можете расширить размер матрицы на 1, чем нужно. Это означает, что если у вас есть массив:

1  *  4  7
8  9  2  3
5  1  2  4
4  3  6  5

Реализуйте это как:

0  0  0  0  0  0
0  1  *  4  7  0
0  8  9  2  3  0
0  5  1  2  4  0
0  4  3  6  5  0
0  0  0  0  0  0

Это даже не повлияет на вашу сумму в конце.

2

По вопросам рекламы [email protected]