这个更简单,就是转换,转换完以后,和原来的一个一个比较,就行
#include <iostream> #include <cstdio> #define maxn 11 using namespace std; typedef struct pattern { int n; char b[maxn][maxn]; }p; p Rotation(p b) { p nb; nb=b; for(int j=0; j<b.n; j++) { for(int i=0; i<b.n; i++) { nb.b[j][i]=b.b[b.n-i-1][j]; } } return nb; } p reflection(p b) { p nb; nb=b; for(int i=0;i<b.n; i++) { for(int j=0; j<b.n; j++) { nb.b[i][j]=b.b[i][b.n-j-1]; } } return nb; } int compare(p b,p bb) { for(int i=0;i<b.n;i++) { for(int j=0;j<b.n;j++) { if(bb.b[i][j]!=b.b[i][j]) { return 0; } } } return 1; } int main() { freopen("transform.in","r",stdin); freopen("transform.out","w",stdout); p nb,b; cin >> b.n; nb.n=b.n; for(int i=0; i<b.n; i++) { for(int j=0;j<b.n; j++) cin >> b.b[i][j]; } for(int i=0;i<b.n; i++) { for(int j=0; j<b.n; j++) cin >> nb.b[i][j]; } if(compare(Rotation(b),nb)) cout << 1 << endl ; else if(compare(Rotation(Rotation(b)),nb)) cout << 2 << endl ; else if(compare(Rotation(Rotation(Rotation(b))),nb)) cout << 3 << endl ; else if(compare(reflection(b),nb)) cout << 4 << endl ; else if(compare(Rotation(reflection(b)),nb) ||compare(Rotation(Rotation(reflection(b))),nb) ||compare(Rotation(Rotation(Rotation(reflection(b)))),nb)) cout << 5 << endl ; else if(compare(b,nb)) cout << 6 << endl ; else cout << 7 << endl ; reflection(b); return 0; }