AcWing 3527. 旋转矩阵
原题链接
简单
//矩阵旋转用对称的方式写
//1.沿着对角线对称一遍,再沿着纵轴反转一遍
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 10;
int n;
// 定义函数 rotate,用来旋转矩阵 a,返回旋转后的矩阵
vector<vector<int>> rotate(vector<vector<int>> a)
{
auto res = a; // 创建一个新的矩阵 res,并初始化为 a
for (int i = 0; i < n; i ++ ) // i 表示行
for (int j = 0, k = n - 1; j < n; j ++, k -- ) // j 表示列,k 表示与 j 对称的列
res[i][j] = a[k][i]; // 进行旋转操作:将矩阵 a 的 (k, i) 元素赋值给 res 的 (i, j)
return res;
}
int main()
{
cin >> n;
vector<vector<int>> a(n, vector<int>(n)); // 创建 n*n 的矩阵 a
auto b = a; // 创建另一个矩阵 b,并初始化与 a 相同
for (int i = 0; i < n; i ++ )
for (int j = 0; j < n; j ++ )
cin >> a[i][j];
for (int i = 0; i < n; i ++ )
for (int j = 0; j < n; j ++ )
cin >> b[i][j];
for (int i = 0; i < 4; i ++ ) // 检查旋转 0 度、90 度、180 度、270 度时,a 是否与 b 相等
{
if (a == b) // 如果矩阵 a 和 b 相等
{
cout << i * 90 << endl; // 输出旋转角度(i * 90)
return 0;
}
a = rotate(a); // 如果不相等,将矩阵 a 旋转 90 度
}
puts("-1"); // 如果四次旋转后都不相等,输出 -1
return 0;
}