Клеточный автомат замкнутый в тор - C++
Доброго времени суток, возникла проблема с написанием алгоритма для клеточного автомата. Вся проблема заключается в проверке соседей на сторонах и по углам массива. К примеру есть массива 10 на 10. Если брать клетки от 2 до 9 то все в порядке, т.к. соседи для них находятся по общему алгоритму. Но что делать со всеми четырьмя сторонами и углами? Писать отдельный алгоритм для них? Кроме глупого перебора ничего в голову не идет. Может кто-нибудь посмотрит на проблему со своей, свежей точки зрения и решение придет самой собой?)
Вот код для проверки соседа «внутренней» части масива. Он меня вполне устраивает.
int neighbors = -M[i][j], k, m;
for(k = i-1; k<=i+1; k++)
for(m = j-1; m <= j+1; m++)
neighbors += M[k][m];
if (i == 0 && j == 0)
{
if (M[0][N - 1])
neighbors++;
else if (M[N - 1][j])
neighbors++;
else if (M[i + 1][0])
neighbors++;
else if (M[0][j + 1])
neighbors++;
}