我有二维数组,并希望将其转换为一维数组。一维数组元素上的最近邻元素操作
二维数组是:
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
如何访问元素数在一维数组的近邻,这样我可以得到同样的结果,当我访问二维数组,如
1 2 3
5 6 7
9 10 11
在C++ ?
我有二维数组,并希望将其转换为一维数组。一维数组元素上的最近邻元素操作
二维数组是:
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
如何访问元素数在一维数组的近邻,这样我可以得到同样的结果,当我访问二维数组,如
1 2 3
5 6 7
9 10 11
在C++ ?
如果您有一个二维阵列,其长度为M
项目长度为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)
注意上面的解决方案使底部和相邻的阵列的顶部,以及右边缘和左边缘。为了摆脱这种情况,只需省略模块化数学运算并检测索引何时移过右/左/上/下边缘。
我很抱歉,但我不明白你的解决方案。你会开导我吗? – taker
如果您正在查看阵列位置'x',则左边的邻居位于'x-1'处。右边的邻居在'x + 1'处。你上面的邻居是'x-M'。你下面的邻居是'x + M'。这假设你的垂直轴随着你的下降而增加。如果你想减少,然后交换上面和下面的数学。 re是字面边缘案例 - 当你到达顶部,底部,左侧或右侧边缘时,你想如何处理邻居? – ObscureRobot
用算术。旧索引'm [1] [2]'新索引'm [1 * 4 + 2]'。旧的最近邻居'[x-1] [y-1],[x] [y-1],x [x + 1] [y]'等等,new:'[(x-1)+ 4 *( Y-1)],[X + 4 *(Y-1)],[X + 1 + 4 *(Y-1)]'。将数组的宽度替换为4。 – user786653
感谢它的工作。 – taker
逻辑,如果你不介意阅读python代码,可以在[这里]找到(http://stackoverflow.com/a/41880018/5496529) –