题意概述:
求第一个字符矩阵经过怎样的变换可以变成第二个矩阵。
解题思路:
穷举所有变换
题解代码:
/*
ID:
PROG: transform
LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
int n;
void mat_rot(char a[][10],char m[][10]){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
m[j][n-i-1]=a[i][j];
}
int mat_equal(char a[][10],char m[][10]){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(m[i][j]!=a[i][j])return 0;
return 1;
}
int main(){
ifstream fin("transform.in");
ofstream fout("transform.out");
char a[10][10],b[10][10],m[10][10],m2[10][10];
while(fin>>n){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
fin>>a[i][j];
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
fin>>b[i][j];
}
mat_rot(a,m);
if(mat_equal(m,b))fout<<1<<endl;
else{
mat_rot(m,m2);
if(mat_equal(m2,b))fout<<2<<endl;
else {
mat_rot(m2,m);
if(mat_equal(m,b))fout<<3<<endl;
else{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
m[i][j]=a[i][n-j-1];
if(mat_equal(m,b))fout<<4<<endl;
else{
mat_rot(m,m2);
if(mat_equal(m2,b))fout<<5<<endl;
else{
mat_rot(m2,m);
if(mat_equal(m,b))fout<<5<<endl;
else {
mat_rot(m,m2);
if(mat_equal(m2,b))fout<<5<<endl;
else {
if(mat_equal(a,b))fout<<6<<endl;
else fout<<7<<endl;
}
}
}
}
}
}
}
}
return 0;
}