矩阵转换,简单题目,每一次比较没有必要真正的转换方阵,而是只要比较转换后的每个元素的位置,对应到原图的位置,并与目标方阵的标准位置比较就好,说的很绕口,也
很难说清楚,看代码吧
还要注意一点 能用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;
}