矩阵相似

矩阵相似

给出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;
}

猜你喜欢

转载自blog.csdn.net/qq_43723073/article/details/86409701