我需要一种算法(顺时针)旋转由一维数组表示的矩阵
到目前为止,我已经找到了以下链接,但无法弄清楚是什么让我更接近我需要的解决方案:
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)
答案 0 :(得分:0)
维基百科有一篇关于“矩阵的顺时针旋转”(In-place matrix transposition -> Algorithms)
的精彩文章您没有说出您使用的是哪种语言,但在这种情况下,类C语言有一种很好的方式来访问“由一维数组表示的矩阵”。
答案 1 :(得分:0)
很简单
顺时针旋转时钟的步骤
1.采用矩阵转置
2.Swap Columns
/*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");
}
经过测试和工作