C++ 在栅格中查找相邻的垂直图元

C++ 在栅格中查找相邻的垂直图元,c++,arrays,C++,Arrays,我很难理解在网格中抓取相邻垂直元素背后的思维过程。假设我有一个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 我想找到所有相邻的水平和垂直相邻元素,并将它们放入一个数组中。数组的大小由每个元素之间可能的墙数给出(不计算外部) 2x3的图形有7面墙,因此阵列看起来像 1 2 2 3 4 5 5 6 //end of horizontal walls 1 4 //beginning

我很难理解在网格中抓取相邻垂直元素背后的思维过程。假设我有一个
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
我想找到所有相邻的水平和垂直相邻元素,并将它们放入一个数组中。数组的大小由每个元素之间可能的墙数给出(计算外部)

2x3的图形有7面墙,因此阵列看起来像

1 2
2 3
4 5
5 6 //end of horizontal walls
1 4 //beginning of vertical walls
2 5
3 6
现在,我已经找到了如何查找给定
的所有水平墙,其中
是我将存储结果的数组:

//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;
  }
}
等等

以下是我目前正在尝试的:

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;
  }
}

还有什么建议非常感谢伪代码,我更喜欢解释而不是代码

好的,我已经找到了解决方案,所以我将发布我所做的一切:

我遇到的问题是,当内部for循环离开并再次启动时,行没有返回到1,这是因为我仍然在用
r
乘以
,这实际上是一个非常简单的修复:

r*行+c*列
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 5
5 10
10 15
15 20
1 6
6 11
11 17