Z字形打印

 可以实现n*m矩阵的Z字形打印

bool flag1=false; 
void Zprint(int** arr,int ar,int ac,int br,int bc,bool flag);
void  printMatrix(int** arr, int n, int m) {
    if(arr == NULL) return;
    
    int ar=0;
    int ac=0;
    int br=0;
    int bc=0;
    bool flag=false;
    while(ar<n)
    {
        Zprint(arr,ar,ac,br,bc,flag);
        ar = ac == m-1 ? ar+1 : ar;
        ac = ac == m-1 ? ac :  ac+1;        
        bc = br == n-1 ? bc+1 : bc;
        br = br == n-1 ? br : br+1;
        flag=!flag;
    }
    printf("\n");

}

void Zprint(int** arr,int ar,int ac,int br,int bc,bool flag)
{

    int len=br-ar;
   
    if(flag==false)
    {
        for(int i = 0 ; i <= len ; i++)
        {
            if(flag1==false)
            {
                printf("%d",arr[br][bc]);
                br--;
                bc++;
                flag1=true;
               
            }
            else
            {
                printf(" %d",arr[br][bc]);
                br--;
                bc++;
            }
        }
    }
    else
    {
        for(int i = 0 ; i <= len ; i++)
        {

            if(flag1==false)
            {
                printf("%d", arr[ar][ac]);
                ar++;
                ac--;
                flag1=true;
                
            }
            else
            {
                printf(" %d",arr[ar][ac]);
                ar++;
                ac--;
            }
        }
    }
}

int main()
{
    int n;
    int x;
    cin>>n;
    int **arr=(int**)malloc(sizeof(int*)*n);
    for(int i=0;i<n;i++)
    {
        arr[i]=(int *)malloc(sizeof(int)*n);
        for(int j=0;j<n;j++)
        {
            cin>>x;
            arr[i][j]=x;
        }
    }
    printMatrix(arr,n,n);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/RainzzZ/p/12783675.html