Я не могу придумать элегантный способ сделать это, но я знаю, что видел это в прошлом.Я просто не знаю, что искать.
Мне даны индексы строк и столбцов, r
и c
двумерной матрицы.Я хочу быть в состоянии пройти 4 соседей.Если элемент находится в углу, он будет иметь только 2 соседей.Если элемент находится на границе, но не в углу, он будет иметь 3 соседей.Если он внутри, у него будет 4 соседа.
Так что я хочу пройти (r+1,c)
, (r-1,c)
, (r,c+1)
, (r,c-1)
и выполнить проверку границ r >= 0 && r < num_rows
и c >= 0 && c < num_cols
одновременно вдвойное гнездо для цикла.
Единственное, что мне удалось придумать, это:
vector<vector<int>> adds{{0,1},{1,0},{-1,0},{0,-1}}
for(int i = 0; i < adds.size(); i++)
{
//do bounds checking with r + adds[i][0] and c + adds[i][1]
//do something with matrix[r + adds[i][0]][c + adds[i][1]]
}
Особенно элегантный, который я помню, видел что-то с функцией max и неиспользуйте массив adds
, который у меня есть.