一個把方陣做對稱變換的程式

lt發表於2020-02-20

分別是上下、左右、繞兩條對角線翻轉和繞中心旋轉-90、180、90度。

int a[8][10][10];
int c[8][100];
#include<cstdio>
int n=4;
flat(int c[100],int a[10][10])
{
    for(int i=1; i<=n; i++)//
    {
        for(int j=1; j<=n; j++)
        {
            c[(i-1)*n+j]=a[i][j];
        }
    }
}
tran(int d,int a[10][10],int b[10][10])
{

    for(int i=1; i<=n; i++)//
    {
        for(int j=1; j<=n; j++)
        {
            if(d==1)a[i][j]=b[j][i];
            if(d==2)a[n+1-i][j]=b[j][i];
        }
    }
}
show(int a[10][10])
{
    printf("\n");
    for(int i=1; i<=n; i++)//init
    {
        for(int j=1; j<=n; j++)
        {
            printf("%2d ",a[i][j]);
        }
        printf("\n");
    }
}
show2(int a[100])
{
    printf("\n");
    for(int i=1; i<=n; i++)//init
    {
        for(int j=1; j<=n; j++)
        {
            printf("%2d ",a[(i-1)*n+j]);
        }
        //printf("\n");
    }
}
int main()
{
    for(int i=1; i<=n; i++)//init
    {
        for(int j=1; j<=n; j++)
        {
            a[0][i][j]=(i-1)*n+j;
        }
    }
    show(a[0]);
    tran(1,a[1],a[0]);
    show(a[1]);   //trans 45
    tran(2,a[2],a[0]);
    show(a[2]);   //trans -90
    tran(2,a[3],a[2]);
    show(a[3]);   //trans 180
    tran(2,a[4],a[3]);
    show(a[4]);   //trans 90
    tran(1,a[5],a[2]);
    show(a[5]);   //trans <->
    tran(1,a[6],a[3]);
    show(a[6]);   //trans -45
    tran(1,a[7],a[4]);
    show(a[7]);   //trans ^v

    for(int d=0;d<8;d++)
    {
     flat(c[d],a[d]);
     show2(c[d]);
    }
}

相關文章