У меня возникли проблемы с выяснением процесса мысли за захватом соседних вертикальных элементов в сетке. Скажем, у меня есть 5x5
сетки:найти соседние вертикальные элементы в сетке
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
Я хочу найти все смежные горизонтальные и вертикальные смежные элементы и поместить их в массив. Размер массива задается возможным количеством стенок между каждым элементом (не, считая наружу), например.
1 | 2 | 3
--- --- ---
4 | 5 | 6
График 2х3 имеет 7 стен, так что массив будет выглядеть
1 2
2 3
4 5
5 6 //end of horizontal walls
1 4 //beginning of vertical walls
2 5
3 6
теперь я понял, как найти все горизонтальные стены дали rows
и cols
, где walls
является массив I будет хранить результат:
//find all horizontal walls in grid
//2-d array to store the element between the wall (0 1) (1 2)
for(int r = 0; r < rows; r++){
for(int c = 0; c < cols-1; c++){
int s = r > 0 ? -1*r : 0; //after first row always write over last space
walls[r*rows+c+s][0] = r*rows+c;
walls[r*rows+c+s][1] = r*rows+c+1;
}
}
но я просто заблудиться на выяснение того, как определить все вертикальные стенки, в сетке 5x5
, например, вертикальные стенки будет
0 5
5 10
10 15
15 20
1 6
6 11
и т.д ...
вот что я в настоящее время пытается:
for(int r = 0; r < rows; r++){
for(int c = 0; c < cols; c++){
//just print the values at the moment, setting walls properly is easy
std::cout << r*rows+c*cols << " " << r*rows+c*cols+5 << std::endl;
}
}
Единственная проблема заключается в этом не сбрасывается после первого столбца , вместо этого он продолжается следующим образом:
0 5
5 10
10 15
15 20
20 25 //nope, should be 1 6
и предложения? псевдо-код очень ценится, я предпочел бы объяснение над кодом