算法——Z形打印二维数组

Posted jessie99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法——Z形打印二维数组相关的知识,希望对你有一定的参考价值。

将二维数组按Z形打印出来

 

 

技术图片

其中有一点在代码的思考中使的非常清晰,将情况分为两大种,一种是走上坡路一种是走下坡路的,在这两个大情况中再分别考虑

#include<stdio.h>
void printZ(int A[][200],int m,int n);
int main()
{
    int m,n,i,j;
    int A[200][200];
    scanf("%d %d",&m,&n);
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d",&A[i][j]);
        }
     } 
     printZ(A,m,n);
    return 0;
 } 

void printZ(int A[][200],int m,int n)
{
    int h,l;
    h=l=0;
    //先定一个布尔类型的记录当前是从左下往右上走上坡路还是从右上往左下走下坡路
    //记录真为走上坡路
    int up=1;
    while(h<m&&l<n)//当都没有越界的时候进行循环 
    {
        //当时从左下往右上上坡路的时候 
        if(up)
        {
            //当时走上坡路的时候先打印出来当前元素
            printf("%d ",A[h][l]);
            //当是第一排但是列没有越界的时候
            if(h==0&&l<n-1)
            {
                //向右移动
                l++;
                //并且把当前情况转为下坡路,因为移动到下一个斜线的话那就会变情况
                up=0; 
                //已经变成下坡路了所以下面关于是上坡路的循环就可以跳过了
                continue; 
             } 
             //当时最后一列但是行没有越界的时候就往下(这种情况是在上坡路的情况中的一个) 
             else if(l==n-1&&h>0)//注意这个是在不是第一行的情况下向下否则就是向右 
             {
                 //向下移动 
                h++; 
                //这样之后情况又变成了下坡路
                up=0; 
                //已经变成下坡路了所以下面关于是上坡路的循环就可以跳过了
                continue; 
              }
              //当处于一条上坡路斜线的中间部分的时候或者是最后一排的时候就继续向上走 ,不需要改变情况 
              else{
                  h--;
                  l++;
              }
        }
        //接下来的下坡路的时候
        else {
            //先打印
            printf("%d ",A[h][l]); 
            //当时第一列的时候
            if(l==0&&h<m-1)
            {
                //向下移动
                h++;
                //变换情况
                up=1;
                continue; 
             }
             //当时最后一排的时候
             else if(h==m-1)
             {
                 //向右移动
                 l++;
                //变换情况 
                up=1;
                continue;
              } 
              //否则就直接向下走
              else {
                  h++;
                  l--;
              } 
         } 
     } 
 } 

 

以上是关于算法——Z形打印二维数组的主要内容,如果未能解决你的问题,请参考以下文章

74. 搜索二维矩阵-Z形查找

ANSI C 中的锯齿形数组

算法:Z字型(Zigzag)编排

23:二维数组回形遍历

为啥代码不能打印这个二维数组的元素?

C 语言数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )