旋转正方形矩阵

Posted zzw1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旋转正方形矩阵相关的知识,希望对你有一定的参考价值。

Problem:
  旋转正方形矩阵【题目】 给定一个整型正方形矩阵matrix,
  请把该矩阵调整成顺时针旋转90度的样子。
  【要求】 额外空间复杂度为O(1).

Solution:
  同样,采用由外向内一圈一圈变换,找到元素变换位置的规律即可。
  难点在于区分偶数维矩阵和奇数维矩阵的不同操作

 

Code:

  

 1 #pragma once
 2 
 3 #include <iostream>
 4 using namespace std;
 5 
 6 template<class T>
 7 void RotateMatrix(T& arr,const int x, const int y)//使用数组的引用传参,怎可在原数组上进行旋转
 8 
 9     int lx = 0, ly = 0; //左上角坐标
10     int rx = x - 1, ry = y - 1;//右下角的坐标
11 
12     while (lx < rx || ly < ry)
13     
14 
15         for (int k = 0; k < ry - ly; ++k)//每一个圈次中所要旋转的元素
16         
17             int temp = arr[lx][ly + k];
18             arr[lx][ly + k] = arr[rx - k][lx];
19             arr[rx - k][lx] = arr[rx][ry - k];
20             arr[rx][ry - k] = arr[lx + k][ry];
21             arr[lx + k][ry] = temp;
22         
23 
24         lx += 1;//左上角右下移
25         ly += 1;
26         rx -= 1;//右下角左上移
27         ry -= 1;
28     
29     
30 
31 
32 void Test()
33 
34     int aa[3][3] =  1,2,3,4,5,6,7,8,9 ;
35     int bb[4][4] =  1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ;
36 
37     RotateMatrix(aa, 3, 3);
38     for (auto &a : aa)
39     
40         for (auto b : a)
41             cout << b << "  ";
42         cout << endl;
43     
44     cout << endl << "******************************" << endl;
45 
46     RotateMatrix(bb, 4, 4);
47     for (auto &a : bb)
48     
49         for (auto b : a)
50             cout << b << "  ";
51         cout << endl;
52     
53     cout << endl << "******************************" << endl;
54 
55 

 

以上是关于旋转正方形矩阵的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

javascript 旋转方形矩阵90度

优化矩阵旋转 - 关于矩阵中心的任意角度

相对于其中心旋转图像

[Codeforces 581D]Three Logos

如何在 OpenGL 中围绕 Z 轴中心旋转对象?