考点:基础
对比:C翻转
默认:顺时针旋转
90度:上下行翻转,再沿副对角线交换
180:上下行翻转,再左右行翻转
270:左右行翻转,再沿副对角线交换
#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE=1001;
void r90(int a[9][9],int n);
void r180(int a[9][9],int n);
void r270(int a[9][9],int n);
bool isequal(int a[9][9],int b[9][9],int n);
int main() {
int n;
while(cin>>n) {
int a[9][9],b[9][9],tmp[9][9],tmp2[9][9],tmp3[9][9];
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
cin>>a[i][j];
tmp[i][j]=a[i][j];
tmp2[i][j]=a[i][j];
tmp3[i][j]=a[i][j];
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
cin>>b[i][j];
}
}
r90(tmp,n);
r180(tmp2,n);
r270(tmp3,n);
if(isequal(a,b,n)) {
cout<<0<<endl;
} else if(isequal(tmp,b,n)) {
cout<<90<<endl;
} else if(isequal(tmp2,b,n)) {
cout<<180<<endl;
} else if(isequal(tmp3,b,n)) {
cout<<270<<endl;
} else {
cout<<-1<<endl;
}
}
return 0;
}
bool isequal(int a[9][9],int b[9][9],int n) {
bool flag=false;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(a[i][j]!=b[i][j]) {
flag=true;
break;
}
}
}
if(flag) {
return false;
} else {
return true;
}
}
void r90(int a[9][9],int n) {
for(int i=0; i<n/2; i++) {
for(int j=0; j<n; j++) {
swap(a[i][j],a[n-i-1][j]);
}
}
for(int i=0; i<n; i++) {
for(int j=i; j<n; j++) {
swap(a[i][j],a[j][i]);
}
}
}
void r180(int a[9][9],int n) {
for(int j=0; j<n/2; j++) {
for(int i=0; i<n; i++) {
swap(a[i][j],a[i][n-1-j]);
}
}
for(int i=0; i<n/2; i++) {
for(int j=0; j<n; j++) {
swap(a[i][j],a[n-i-1][j]);
}
}
}
void r270(int a[9][9],int n) {
for(int j=0; j<n/2; j++) {
for(int i=0; i<n; i++) {
swap(a[i][j],a[i][n-1-j]);
}
}
for(int i=0; i<n; i++) {
for(int j=i; j<n; j++) {
swap(a[i][j],a[j][i]);
}
}
}