首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旋转一维数组矩阵

旋转一维数组矩阵
EN

Stack Overflow用户
提问于 2010-11-28 01:40:46
回答 3查看 3.5K关注 0票数 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)*6 3)

(7 4 1(花药顺时针旋转周期) (9 8 7

*8 5 2*->*6 5 4

9月6日3)中英两国,中英两国

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-28 01:50:26

维基百科上有一篇关于“矩阵的顺时针旋转”(In-place matrix transposition -> Algorithms)的文章。

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

票数 0
EN

Stack Overflow用户

发布于 2016-08-16 07:30:22

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

代码语言:javascript
复制
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;
}

这个答案只适用于方阵。旁注:要像访问一维数组一样访问正方形2D数组中的元素,只需简单地执行以下操作:for matrix NxN: m1[i,j] = m2[i * N + j],这就是我在linked解决方案中所做的全部更改。

票数 1
EN

Stack Overflow用户

发布于 2017-03-07 19:07:10

这很简单

按时钟旋转的步骤

1.矩阵转置

2.交换列

代码语言:javascript
复制
/*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");
        }

测试和运行良好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4292997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档