2014-11-06 7 views
0

У меня возникли проблемы с выяснением процесса мысли за захватом соседних вертикальных элементов в сетке. Скажем, у меня есть 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 

и предложения? псевдо-код очень ценится, я предпочел бы объяснение над кодом

ответ

0

Ok, просто понял, решение, поэтому я выложу все, что я сделал:

проблемы у меня была строка не Недавние назад 1, когда внутренний цикл влево и начал снова, это было потому, что я до сих пор умножая r на rows, это было на самом деле очень просто исправить:

r*rows+c*cols << " " << r*rows+c*cols+5 <<

становится

r+c*cols << " " << r+c*cols+5 <<

Я также был запущен внутренний цикл один слишком много раз, так что, меняя

c < cols должен стать c < cols-1 и теперь мой выход:

0 5 
5 10 
10 15 
15 20 
1 6 
6 11 
11 17 

и т.д ...

Смежные вопросы