我需要一个算法来(顺时针)旋转一个由一维数组表示的矩阵。
到目前为止,我已经找到了以下链接,但找不到任何能让我更接近所需解决方案的链接:
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)中英两国,中英两国
发布于 2010-11-28 01:50:26
维基百科上有一篇关于“矩阵的顺时针旋转”(In-place matrix transposition -> Algorithms)的文章。
您没有说明您使用的是哪种语言,但是对于这种情况,类C语言有一个很好的方法来访问“由一维数组表示的矩阵”。
发布于 2016-08-16 07:30:22
根据this的回答,我将解决方案从二维数组更改为一维数组。这是用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;
}这个答案只适用于方阵。旁注:要像访问一维数组一样访问正方形2D数组中的元素,只需简单地执行以下操作:for matrix NxN: m1[i,j] = m2[i * N + j],这就是我在linked解决方案中所做的全部更改。
发布于 2017-03-07 19:07:10
这很简单
按时钟旋转的步骤
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");
}测试和运行良好
https://stackoverflow.com/questions/4292997
复制相似问题