####Transformations####
简述:
按照叙述方式,把图进行变换。
旋转九十、一百八、两百七、对称、组合变换等方式,判断使用哪种可以的到最后的图。我把每种都分开成函数了。前三种可以返回值代表不同方案就好了。
代码:
#include <stdio.h>
#include <stdlib.h>
int n;
char oldg[12][12];
char tmpg[12][12];
char newg[12][12];
void read(int x);
int try123();
int try4();
int try5();
int try6();
int main(void)
{
freopen("transform.in", "r", stdin);
freopen("transform.out", "w", stdout);
scanf("%d\n", &n);
read(1);read(2);
int a = try123();
if(a){printf("%d\n", a);return 0;}
if(try4()){printf("4\n");return 0;}
if(try5()){printf("5\n");return 0;}
if(try6()){printf("6\n");return 0;}
printf("7\n");
return 0;
}
void read(int x)
{
int i, j;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
if(x == 1)
oldg[i][j] = getchar();
else
newg[i][j] = getchar();
getchar();
}
return;
}
int try123()
{
int i, j, flag = 1;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(oldg[n-1-j][i] != newg[i][j])
{
flag = 0;
break;
}
if(flag)return 1;
flag = 1;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(oldg[n-1-i][n-1-j] != newg[i][j])
{
flag = 0;
break;
}
if(flag)return 2;
flag = 1;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(oldg[j][n-1-i] != newg[i][j])
{
flag = 0;
break;
}
if(flag)
return 3;
else
return 0;
}
int try4()
{
int i, j, flag = 1;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(oldg[i][n-1-j] != newg[i][j])
{
flag = 0;
break;
}
return flag;
}
int try5()
{
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
tmpg[i][n-1-j] = oldg[i][j];
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
oldg[i][j] = tmpg[i][j];
if(try123())
return 1;
else
return 0;
}
int try6()
{
int i, j, flag = 1;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(oldg[i][j] != newg[i][j])
{
flag = 0;
break;
}
return flag;
}