【问题标题】:Nearest Neighbor Operation on 1D array elements一维数组元素的最近邻运算
【发布时间】:2011-10-23 03:57:17
【问题描述】:

我有一个二维数组,想把它转换成一维数组。

二维数组是:

1   2   3   4
5   6   7   8
9   10  11  12
13  14  15  16

转一维数组:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

如何在一维数组中访问元素号6的最近邻,以便在二维数组中访问时得到相同的结果,如

1   2   3   
5   6   7   
9   10  11

在 C++ 中?

【问题讨论】:

  • 带算术。旧索引m[1][2] 新索引m[1*4+2]。旧的最近邻居[x-1][y-1],[x][y-1],x[x+1][y] 等,新的:[(x-1)+4*(y-1)],[x+4*(y-1)],[x+1+4*(y-1)]。将 4 替换为数组的宽度。
  • 逻辑,如果你不介意看python代码,可以找here

标签: c++ multidimensional-array


【解决方案1】:

如果您有一个长为 M 个元素 x 高为 N 个元素的二维数组,则您需要一个包含 M*N 元素的一维数组。

当试图找到元素x的邻居时:

left(x) = (x - 1) % M
right(x) = (x + 1) % M
above(x) = (x - M) % (M * N)
below(x) = (x + M) % (M * N)

请注意,上述解决方案使数组的底部和顶部以及右边缘和左边缘相邻。要摆脱这种情况,只需省略模块化数学并检测您的索引何时超过右/左/上/下边缘。

【讨论】:

  • 很抱歉,我无法理解您的解决方案。你能启发我吗?
  • 如果您正在查看数组位置x,那么左边的邻居是x-1。右边的邻居是x+1。你上面的邻居是x-M。你下面的邻居是x+M。这假设您的垂直轴随着您的下降而增加。如果你想让它减少,那么把数学换成上下。 re 是文字边缘情况 - 当您到达顶部、底部、左侧或右侧边缘时,您想如何处理邻居?
猜你喜欢
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2020-09-10
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多