数组 ‘之’ 字型打印

#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;
		}
	}
}

 

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/a3765421/article/details/88655290
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞