之字形打印矩阵

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 

 

以上是关于之字形打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章

之字形打印矩阵

[算法]“之”字形打印矩阵

之字形打印矩阵

8.3 “之”字形打印矩阵

之字形打印矩阵

斜对角线"之字形"打印矩阵