在网格中查找相邻的垂直元素

时间:2014-11-06 23:27:13

标签: 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

我想找到所有相邻的水平和垂直相邻元素并将它们放入一个数组中。数组的大小由每个元素之间可能的墙数(计算外部数据)给出,例如。

 1 | 2 | 3
--- --- ---
 4 | 5 | 6

2x3的图表有7个墙,所以数组看起来像

1 2
2 3
4 5
5 6 //end of horizontal walls
1 4 //beginning of vertical walls
2 5
3 6

现在我已经找到了如何查找给定rowscols的所有水平墙,其中walls是我将存储结果的数组:

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

唯一的问题是,在 1 的第一列之后,这不会重置,而是继续如下:

0 5
5 10
10 15
15 20
20 25 //nope, should be 1 6

和建议?非常感谢伪代码我希望对代码进行解释

1 个答案:

答案 0 :(得分:0)

好的,刚刚找到解决方案,所以我会发布我所做的一切:

我遇到的问题是,当内部for循环离开并再次启动时,行最近没有返回到1,这是因为我仍然将r乘以rows,这实际上非常简单固定:

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

变为

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

我也在运行内部for循环太多次了,所以改变了

c < cols应该变为c < cols-1,现在输出为:

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

等...