USACO 1.3.2_transform

/*
ID: cjn77881
LANG: C++
TASK: transform
*/

#include <stdio.h>
#include <string.h>

typedef struct matrix matrix; //为了使得函数可以返回二维数组,特定义一个结构体 
struct matrix{
	char ch[10][10];
};

char ch_tmp;
matrix a,b,stdrd;
int N,ans;

bool check(matrix a,matrix b){
	for (int i=0;i<N;i++)
		for (int j=0;j<N;j++) 
			if (a.ch[i][j]!=b.ch[i][j]) return false;				
	return true;
}

matrix rotate(matrix mat){ 
	matrix tmp; //如果不是定义的结构体,想要返回一个数组时,须使用static int array[x] 方式,申请静态内存空间,否则在函数结束时,会释放内存,无法得到想要的结果。 
	memset(tmp.ch,sizeof(tmp.ch),0); //初始化结构体中的数组元素,第一次用感觉有点别扭。 
	for (int i=0;i<N;i++)
			for (int j=0;j<N;j++)
				tmp.ch[j][N-1-i] = mat.ch[i][j]; //操作结构体重的数组元素 
	return tmp;
}

matrix reflect(matrix mat){
	matrix tmp;
	memset(tmp.ch,sizeof(tmp.ch),0);
	for (int i=0;i<N;i++)
		for (int j=0;j<N;j++)
			tmp.ch[i][N-1-j] = mat.ch[i][j];
	return tmp;
}

void transform(int x){
	if (x == 1) {		
		memset(b.ch,sizeof(b.ch),0);
		b = rotate(a);
		if (check(stdrd,b)) ans=1;	
		/*	debug所用代码 
		printf("here is mode %d\n",x);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",b.ch[i][j]);
			printf("\n");
		}
		*/
	}
	if (x == 2){
		memset(b.ch,sizeof(b.ch),0);
		b = rotate(a);
		b = rotate(b);
		if (check(stdrd,b)) ans=2;	
		/*
		printf("here is mode %d\n",x);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",b.ch[i][j]);
			printf("\n");
		}	
		*/	
	}
	if (x == 3){
		memset(b.ch,sizeof(b.ch),0);
		b = rotate(a);
		b = rotate(b);
		b = rotate(b);
		if (check(stdrd,b)) ans=3;
		/*
		printf("here is mode %d\n",x);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",b.ch[i][j]);
			printf("\n");
		}
		*/
	}
	if (x == 4){
		memset(b.ch,sizeof(b.ch),0);	
		b=reflect(a);		
		if (check(stdrd,b)) ans=4;
		/*
		printf("here is mode %d\n",x);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",b.ch[i][j]);
			printf("\n");
		}
		*/
	}
	
	if (x == 5){
		memset(b.ch,sizeof(b.ch),0);	
		b = reflect(a);
		b = rotate(b);
		if (check(stdrd,b)) ans=5;
		/*
		printf("here is mode %d. First try\n",x);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",b.ch[i][j]);
			printf("\n");
		}
		*/
		b = rotate(b);
		if (check(stdrd,b)) ans=5;
		/* 
		printf("here is mode %d. Second try\n",x);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",b.ch[i][j]);
			printf("\n");
		}
		*/ 
		b = rotate(b);
		if (check(stdrd,b)) ans=5;
		/*
		printf("here is mode %d. Third try\n",x);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",b.ch[i][j]);
			printf("\n");
		}		
		*/
	}
	
	if (x == 6){
		memset(b.ch,sizeof(b.ch),0);
		b = a;
		if (check(stdrd,b)) ans=6;
	}
	
	return;
}

int main(){
	
	FILE *fin = fopen("transform.in","r");
	FILE *fout = fopen("transform.out","w");
	
	memset(a.ch,sizeof(a.ch),0);
	memset(b.ch,sizeof(b.ch),0);
	
	fscanf(fin,"%d\n",&N);
	for (int i=0;i<N;i++){		
		for (int j=0;j<N;j++) fscanf(fin,"%c",&a.ch[i][j]);
		fscanf(fin,"\n");
	}
	for (int i=0;i<N;i++){		
		for (int j=0;j<N;j++) fscanf(fin,"%c",&stdrd.ch[i][j]);
		fscanf(fin,"\n");
	}	
	/*
	printf("here is mode %d\n",0);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",stdrd.ch[i][j]);
			printf("\n");
	}
	printf("here is mode %d,Original Data\n",0);
		for(int i=0;i<N;i++) {
			for (int j=0;j<N;j++) printf("%c",a.ch[i][j]);
			printf("\n");
	}
	*/
	
	ans = 7;	
	for (int i=1;i<7;i++) if (ans == 7)
		transform(i);
	fprintf(fout,"%d\n",ans);
	//printf("%d\n",ans);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值