就地旋转2D矩形阵列

Gha*_*nPL 5 c++ arrays rotation in-place

我有一个像这样的非正方形数组:

const int dim1 = 3, dim2 = 4;
int array[12] = { 1, 2, 3, 
                  4, 5, 6,
                  7, 8, 9,
                 10,11,12};
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为:

{3,6,9,12,
 2,5,8,11,
 1,4,7,10}
Run Code Online (Sandbox Code Playgroud)

也就是说,逆时针旋转/移动它(或顺时针方向,算法应该类似).

该算法应使用最小量的空间.我必须在极其受内存限制的环境中旋转图像,因此空间越小越好.速度不是一个大问题.

ybu*_*ill 8

您可以就地转置矩阵(请参阅http://en.wikipedia.org/wiki/In-place_matrix_transposition),然后反转这些微不足道的行.

  • 恐怕您唯一的选择是翻译 fortran 源代码或阅读论文并从头开始实施。请注意,您为原始问题找到的任何算法都意味着众所周知的矩阵转置问题的解决方案。 (2认同)