矩阵相似
给出2个大小相同的矩阵方阵A,B,方阵中的元素为0或1。若A和B相似,满足下面条件: ① A=B 相等,则输出0 ② A经过顺时针旋转90°成为B,则输出1 ③ A经过顺时针旋转180°成为B,则输出2 ④ A经过顺时针旋转270°成为B,则输出3 若A,B不相似,则输出-1; 例如
A: B: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
则输出1,因为A顺时针旋转90°成为B。
输入
第一行为一个整数n(1≤n≤20), 接下来的n行表示A矩阵的01方阵,一行中的数之间均有一个空格分隔; 再接下来的n行表示B矩阵的01方阵,一行中的数之间也均有一个空格分隔
输出
一个整数(0,或1,或2, 或3,或-1)即A,B相似的结果。
样例输入 [复制]
4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
样例输出 [复制]
1
#include<stdio.h>
int fun1(int a[][100],int b[][100],int n);
int fun2(int a[][100],int b[][100],int n);
int fun3(int a[][100],int b[][100],int n);
int fun4(int a[][100],int b[][100],int n);
int main()
{
int a[100][100],b[100][100],n,i,j;
int flag;
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&b[i][j]);
flag=fun1(a,b,n);
if(flag==9)
printf("%d",-1);
else
printf("%d",flag);
}
int fun1(int a[][100],int b[][100],int n)
{
int i,j,flag=0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(a[i][j]!=b[i][j])
{
flag=9;
break;
}
}
if(flag==9)
break;
}
if(flag==9)
flag=fun2(a,b,n);
return flag;
}
int fun2(int a[][100],int b[][100],int n)
{
int i,j,flag=1;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(a[i][j]!=b[j][n-1-i])
{
flag=9;
break;
}
}
if(flag==9)
break;
}
if(flag==9)
flag=fun3(a,b,n);
return flag;
}
int fun3(int a[][100],int b[][100],int n)
{
int i,j,flag=2;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(a[i][j]!=b[n-1-i][n-1-j])
{
flag=9;
break;
}
}
if(flag==9)
break;
}
if(flag==9)
flag=fun4(a,b,n);
return flag;
}
int fun4(int a[][100],int b[][100],int n)
{
int i,j,flag=3;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(a[i][j]!=b[n-1-j][i])
{
flag=9;
break;
}
}
if(flag==9)
break;
}
return flag;
}