宏观上:主要函数是打印对角线函数,其中有个bool控制是从上往下打印 还是从下往上打印
另外一个函数控制是 : 现在打印那条对角线
#include<iostream>
using namespace std;
void zhi_print(int matrix[][3], int row,int col);
void line_print(int matrix[][3],int row1, int col1,
int row2, int col2, bool flag);
int main(){
int matrix[][3]={{1,3,4},{2,5,9},{6,8,10},{7,11,12}};
// int matrix[][4]={{1,3,4,10},{2,5,9,11},{6,8,12,15},{7,13,14,16}};
// zhi_print(matrix,4,4);
zhi_print(matrix,4,3);
return 0;
}
void zhi_print(int matrix[][3], int row,int col){
int col1 = 0;
int row1 = 0;
int row2 = 0;
int col2 = 0;
bool flag = false;
//先打印左上角的点
line_print(matrix,row1,col1,row2,col2,flag);
//接着一个指针往右走再往下走,另外一个指标先往下走,然后往右走。最终在右下角两个指针汇合 ,打印结束
while(row1 <=row-1 && row2 <= row-1 && col1 <=col-1 && col2 <= col-1){
//反转打印的朝向
flag = flag ? false:true;
//第一个指针移动
if(col1 <col-1){
col1++;
}else{
row1++;
}
//第二个指针移动
if(row2 <row-1){
row2++;
}else{
col2++;
}
//打印一条线
line_print(matrix,row1,col1,
row2,col2,flag);
}
}
//flag = true:从下到上
//这个函数打印一条东北朝向的对角线,有从上往下,有从下往上
void line_print(int matrix[][3],int row1, int col1,
int row2, int col2, bool flag){
int rowC;
int colC;
if(flag){
rowC = row2;
colC = col2;
while(rowC>=row1 && colC<=col1){
cout << matrix[rowC--][colC++] << endl;
}
}else{
rowC = row1;
colC = col1;
while(rowC<=row2 && colC>=col2){
cout << matrix[rowC++][colC--] << endl;
}
}
}