USACO 1.2 transform

来源:互联网 发布:java移动端服务端 编辑:程序博客网 时间:2024/05/17 02:34

题意概述:
求第一个字符矩阵经过怎样的变换可以变成第二个矩阵。
解题思路:
穷举所有变换
题解代码:

/*ID: PROG: transformLANG: C++                  */#include<bits/stdc++.h>using namespace std;int n;void mat_rot(char a[][10],char m[][10]){    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)            m[j][n-i-1]=a[i][j];}int mat_equal(char a[][10],char m[][10]){    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)            if(m[i][j]!=a[i][j])return 0;    return 1;}int main(){    ifstream fin("transform.in");    ofstream fout("transform.out");    char a[10][10],b[10][10],m[10][10],m2[10][10];     while(fin>>n){        for(int i=0;i<n;i++)            for(int j=0;j<n;j++){                fin>>a[i][j];            }        for(int i=0;i<n;i++)            for(int j=0;j<n;j++){                fin>>b[i][j];            }        mat_rot(a,m);        if(mat_equal(m,b))fout<<1<<endl;        else{            mat_rot(m,m2);            if(mat_equal(m2,b))fout<<2<<endl;            else {                mat_rot(m2,m);                if(mat_equal(m,b))fout<<3<<endl;                else{                    for(int i=0;i<n;i++)                        for(int j=0;j<n;j++)                            m[i][j]=a[i][n-j-1];                    if(mat_equal(m,b))fout<<4<<endl;                    else{                        mat_rot(m,m2);                        if(mat_equal(m2,b))fout<<5<<endl;                        else{                            mat_rot(m2,m);                            if(mat_equal(m,b))fout<<5<<endl;                            else {                                mat_rot(m,m2);                                if(mat_equal(m2,b))fout<<5<<endl;                                else {                                    if(mat_equal(a,b))fout<<6<<endl;                                    else fout<<7<<endl;                                }                            }                        }                    }                }            }        }    }    return 0;}
原创粉丝点击