之字形打印矩阵

之字形打印就比较有趣(烦人)了,大概是这个样子
在这里插入图片描述
还是要从宏观调度上考虑,如果抠死在局部下标的变化上,可能会死。

先画对角线
设置变量A,B
在这里插入图片描述
A往右走,走到最右就往下,B往下走,走到最下就往右
在这里插入图片描述
在这里插入图片描述
然后只要实现一个函数,功能为:已知一条对角线的左下角和右上角,打印这条对角线。
最后,一条从下往上打印,一条从上往下打印,之字形打印就实现了

code:

#include<iostream>
#include<vector>

using namespace std;

class ZigZagPrintMatrix {
public:
    void printLevel(vector<vector<int>> m, int tR, int tC, int dR, int dC, bool f){
        if(f){
            while(tR!=dR+1)
                cout<<m[tR++][tC--]<<" ";
        }
        else{
            while(dR!=tR-1)
                cout<<m[dR--][dC++]<<" ";
        }
    }
    void printMatrixZigZag(vector<vector<int>> matrix) {
        int aR=0;
        int aC=0;
        int bR=0;
        int bC=0;
        int endR=matrix.size()-1;
        int endC=matrix[0].size()-1;
        bool fromUp=false;
        while(aR!=endR+1){
            printLevel(matrix,aR,aC,bR,bC,fromUp);
            aR=aC==endC?aR+1:aR;
            aC=aC==endC?aC:aC+1;
            bC=bR==endR?bC+1:bC;
            bR=bR==endR?bR:bR+1;
            fromUp=!fromUp;
        }

    }
};

int main(){
    vector<vector<int>>matrix;
    for(int i=0;i<2;i++){
        vector<int>temp;
        for(int j=0;j<5;j++){
           int data;
           cin>>data;
           temp.push_back(data);
        }
        matrix.push_back(temp);
    }
    ZigZagPrintMatrix test;
    test.printMatrixZigZag(matrix);

    return 0;

}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值