矩阵转换,简单题目,每一次比较没有必要真正的转换方阵,而是只要比较转换后的每个元素的位置,对应到原图的位置,并与目标方阵的标准位置比较就好,说的很绕口,也
很难说清楚,看代码吧
还要注意一点 能用1转换的,就不能用其他的,优先级不一样
/* ID: zhuihun1 PROG: transform LANG: C++ */ #include <iostream> #include <fstream> #include <string.h> #include <stdio.h> #include<algorithm> #define MAXSIZE 20 using namespace std; char aim_map[MAXSIZE][MAXSIZE]; int n; bool clockwise(char map[MAXSIZE][MAXSIZE],int du) { int i,j,g,h; switch(du) { case 270: for(j=0,g=0;i<n&&g<n;j++,g++) for(i=n-1,h=0;i>-1&&h<n;i--,h++) if(aim_map[i][j]!=map[g][h]) return false; break; case 180: for(i=n-1,g=0;i>-1&&g<n;i--,g++) for(j=n-1,h=0;j>-1&&h<n;j--,h++) if(aim_map[i][j]!=map[g][h]) return false; break; case 90: for(j=n-1,g=0;j>-1&&g<n;j--,g++) for(i=0,h=0;i<n&&h<n;i++,h++) if(aim_map[i][j]!=map[g][h]) return false; break; case -1: for(i=0,g=0;i<n&&g<n;i++,g++) for(j=n-1,h=0;j>-1&&h<n;j--,h++) if(aim_map[i][j]!=map[g][h]) return false; break; } return true; } bool comp(char map[MAXSIZE][MAXSIZE]) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(aim_map[i][j]!=map[i][j]) return false; return true; } int main() { char map[MAXSIZE][MAXSIZE]; ofstream fout ("transform.out"); ifstream fin ("transform.in"); int i,j,g,h,num=7; fin>>n; for(i=0;i<n;i++) for(j=0;j<n;j++) fin>>map[i][j]; for(i=0;i<n;i++) for(j=0;j<n;j++) fin>>aim_map[i][j]; if(clockwise(map,90)) num=1; else if(clockwise(map,180)) num=2; else if(clockwise(map,270)) num=3; else if(clockwise(map,-1)) num=4; else if(comp(map)) num=6; else { char tmp_map[MAXSIZE][MAXSIZE]; for(i=0,g=0;i<n&&g<n;i++,g++) for(j=n-1,h=0;j>-1&&h<n;j--,h++) tmp_map[i][j]=map[g][h]; if(clockwise(tmp_map,90)) num=5; else if(clockwise(tmp_map,180)) num=5; else if(clockwise(tmp_map,270)) num=5; } fout<<num<<endl; return 0; }