2

我需要一种用于(顺时针)旋转由一维数组表示的矩阵的算法。
到目前为止,我已经找到了以下链接,但找不到任何让我更接近我需要的解决方案的东西:http:
//basgun.wordpress.com/2008/04/11/rotate-array/
http:// www.rawkam.com/?p=1008

任何建议或线索将不胜感激!

赫里斯托

编辑:这是示例
(1 2 3(顺时针旋转一个循环)(7 4 1
 4 5 6 ---------> 8 5 2
 7 8 9)9 6 3)

(7 4 1 (花药顺时针旋转循环)(9 8 7
 8 5 2 ---------> 6 5 4
 9 6 3)3 2 1)

4

3 回答 3

1

基于这个答案,我将解决方案从二维数组更改为一维数组。这是用 C# 编写的,但应该适用于任何 C 风格的语言。

public static int[] Rotate1DSquareMatrixClockwise(int[] matrix)
{
    int size = (int)Math.Sqrt(matrix.Length);
    int[] result = new int[matrix.Length];

    for (int i = 0; i < size; ++i)
    {
        for (int j = 0; j < size; ++j)
        {
            result[i * size + j] = matrix[(size - j - 1) * size + i];
        }
    }

    return result;
}

此答案仅适用于方阵。旁注:要将方形二维数组中的元素作为一维数组访问,它很简单:for matrix NxN: m1[i,j] = m2[i * N + j]所以,这就是我在链接解决方案中所做的全部更改。

于 2016-08-15T23:30:21.873 回答
0

维基百科有一篇关于“矩阵顺时针旋转”的精彩文章(就地矩阵转置 -> 算法

您没有说您使用哪种语言,但在这种情况下,类 C 语言有一种很好的方式来访问“由一维数组表示的矩阵”。

于 2010-11-27T17:50:25.853 回答
0

很简单

顺时针旋转的步骤

1.对矩阵进行转置

2.交换列

/*a is the given matrix , b is the output matrix ,n is the size of the matrix*/
System.out.println("Transpose of given matrix\n");
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
              b[i][j]=a[j][i];
            }
        }

        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                System.out.print(b[i][j]+"\t");
            }
            System.out.println("\n");
        }

        System.out.println("Clockwise Rotation of given matrix\n");

        for(i=0;i<n/2;i++)
        {
            for(j=0;j<n;j++)
            {

                sw=b[j][i];
                b[j][i]=b[j][n-1-i];
                b[j][n-1-i]=sw;
            }
            System.out.println("\n");
        }


        //Print the Result 
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                System.out.print(b[i][j]+"\t");
            }
            System.out.println("\n");
        }

测试并运行良好

于 2017-03-07T11:07:10.157 回答