之字形打印就比较有趣(烦人)了,大概是这个样子
还是要从宏观调度上考虑,如果抠死在局部下标的变化上,可能会死。
先画对角线
设置变量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;
}