-
顺时针旋转90度,可以先沿着主对角线翻转,再沿着纵轴翻转,即可
-
对角线翻转,i遍历所有行,j只需遍历到i-1
-
沿着纵轴翻转,先遍历所有行,再正着一遍,反着一遍,遍历列
逆时针旋转90度,第一步与顺时针相同,第二步是沿着横轴翻转,先遍历所有列,再正着一遍,反着一遍,遍历行
顺时针旋转180度——先沿着纵轴翻转一次,再沿着横轴翻转一次
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
typedef vector<vector<int>> VVI;
void rotate(VVI& a){
// 顺时针旋转90度,可以先沿着主对角线翻转,再沿着纵轴翻转,即可
for(int i = 0; i<n; i++){
for(int j = 0; j<i; j++) // 对角线,j只需遍历到i-1即可
swap(a[i][j], a[j][i]);
}
for(int i = 0; i<n; i++){ // 先遍历所有行
for(int j = 0, k = n-1; j<k; j++, k--) // 正着一遍,反着一遍,遍历列
swap(a[i][j],a[i][k]);
}
}
int main(){
cin >> n;
VVI a(n, vector<int>(n));
VVI b(n, vector<int>(n));
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++){
if(a == b){
cout << i*90<<endl;
return 0;
}
rotate(a);
}
cout <<"-1" << endl;
return 0;
}