之字形打印矩阵
Posted zzw1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了之字形打印矩阵相关的知识,希望对你有一定的参考价值。
Problem:
“之”字形打印矩阵【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,
例如: 1 2 3 4 5 6 7 8 9 10 11 12
“之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12
【要求】 额外空间复杂度为O(1)
Solution:
使用A,B两个坐标,初始值为(0,0),(0,0),A,B的连线为之字形的斜线
A移动方向为向右走,B移动方向为向下走,A到最右边了就向下走,B到最下面了就向右走
使用一个bool值,判断是向右上方方向遍历A-B直线,还是向左下角方向遍历A-B直线
A
|
B- 1 2 3 4
5 6 7 8
9 1 0 5
Code:
1 #include <iostream> 2 3 using namespace std; 4 5 template<class T> 6 void ZiPrint(const T arr, const int x, const int y) 7 8 int Ax = 0, Ay = 0;//初始化A,B的坐标 9 int Bx = 0, By = 0; 10 bool flag = true;//true为右上方方向遍历, false为左下角方向遍历 11 12 while (Ax <= x-1 && Ay <= y-1)//A到右下角就遍历完毕 13 14 if(flag)//右上方方向遍历 15 16 int Tx = Bx, Ty = By; 17 while (Tx >= Ax || Ty <= Ay) 18 19 cout << arr[Tx][Ty] << " "; 20 Tx -= 1; 21 Ty += 1; 22 23 flag = false; 24 25 else//向左下角方向遍历 26 27 int Tx = Ax, Ty = Ay; 28 while (Tx <= Bx || Ty >= By) 29 30 cout << arr[Tx][Ty] << " "; 31 Tx += 1; 32 Ty -= 1; 33 34 flag = true; 35 36 //更新A,B 37 if (Ay < y - 1) 38 Ay += 1; 39 else 40 Ax += 1; 41 42 if (Bx < x - 1) 43 Bx += 1; 44 else 45 By += 1; 46 47 48 cout << endl; 49 50 51 52 void Test() 53 54 int aa[3][4] = 1,2,3,4,5,6,7,8,9,10,11,12 ; 55 ZiPrint(aa, 3, 4); 56
以上是关于之字形打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章