the reason of failure:1、是只进行一次操作然后选出数字最小的编号,而不是操作N次然后找出最小操作次数能达到结果图案,认真读题.
thinking:按照题目跟着模拟就好.
代码:
/*
PROG: transform
LANG: C++
ID: me
*/
#include <bits/stdc++.h>
using namespace std;
struct ttt{
char x[11][11];
};
ttt square0,square1,square2,square3;
ttt walked;
int n;
queue<ttt>qq;
void fan90(){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
square3.x[j][n-1-i]=square1.x[i][j];
}
void fan180(){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
square3.x[n-1-i][n-1-j]=square1.x[i][j];
}
void fan270(){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
square3.x[n-j-1][i]=square1.x[i][j];
}
void fanshe(){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
square3.x[i][n-j-1]=square1.x[i][j];
}
void zhuhe(int q){
fanshe();
if(q==0)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
square0.x[j][n-1-i]=square3.x[i][j];
if(q==1)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
square0.x[n-1-i][n-1-j]=square3.x[i][j];
if(q==2)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
square0.x[n-j-1][i]=square3.x[i][j];
}
int main(){
int i,j,k,f1=7;
freopen("transform.in","r",stdin);
freopen("transform.out","w",stdout);
cin >> n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin >> square1.x[i][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin >> square2.x[i][j];
if(memcmp(&square1,&square2,sizeof(ttt))==0)f1=6;
fan90();
for(i=0;i<3;i++){
zhuhe(i);
//for(j=0;j<n;j++){
// for(k=0;k<n;k++)
// cout << square0.x[j][k];
// cout << endl;}
if(memcmp(&square0,&square2,sizeof(ttt))==0)f1=5;
}
fanshe();
if(memcmp(&square3,&square2,sizeof(ttt))==0)f1=4;
fan270();
if(memcmp(&square3,&square2,sizeof(ttt))==0)f1=3;
fan180();
if(memcmp(&square3,&square2,sizeof(ttt))==0)f1=2;
fan90();
if(memcmp(&square3,&square2,sizeof(ttt))==0)f1=1;
cout << f1 << endl;
return 0;
}