Соседи клетки в границах матрицы
Я сталкиваюсь с некоторыми проблемами, чтобы найти соседей в матрице. Я стараюсь не ставить много if
операторы в коде, потому что я уверен, что есть лучший способ сделать это, но я не знаю точно, как.
Для упрощения, скажем, у нас есть следующая матрица:
1 2 3 4 5
6 7 8 9 6
1 2 3 4 5
2 3 4 6 7
Учитывая клетку [2,2] = 3
соседи будут (i,j-1)
,(i-1,j)
,(i+1,j)
,(i,j+1)
,(i+1,j+1)
,(i-1,j-1)
, Я создал "маску" для него, используя for-loop
как это, где inicio[0]
это i-координата моего текущего элемента (2 в примере) и inicio[1]
является j-координатой (также 2 для элемента 3). Кроме того, я считаю, что элемент должен быть в центре маски.
for(k=inicio[0]-1;k<inicio[0]+1;k++){
for(z=inicio[1]-1;z<inicio[1]+1;z++)
if(k!=0 || z!=0) //jump the current cell
Однако я не знаю, как относиться к элементам в границах. Если я хочу найти соседей элемента [0,0] = 1
например, учитывая, что элемент должен находиться в середине маски следующим образом:
x x x
x 1 2
x 6 7
Как я могу относиться к этим X
элементы? Я думал об инициализации границ на нуле, но думаю, что это неправильный способ сделать это. Так что если кто-нибудь может объяснить лучший способ сделать это или алгоритм, я буду рад.