185 矩阵的之字形遍历

原题网址:http://www.lintcode.com/zh-cn/problem/matrix-zigzag-traversal/

给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。

样例

对于如下矩阵:

[
  [1, 2,  3,  4],
  [5, 6,  7,  8],
  [9,10, 11, 12]
]

返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]

 1 #include <iostream>
 2 #include <vector>
 3 #include <math.h>
 4 #include <string>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8  vector<int> printZMatrix(vector<vector<int>> &matrix)
 9  { 
10      int row=matrix.size();
11      int col=matrix[0].size();
12      int total=row*col;
13      vector<int> result;
14      int i=0;
15      int j=0;
16      int count=0;
17 
18      result.push_back(matrix[i][j]);
19      count++;
20      
21      bool up=true; 
22 
23      while(count<total)
24      {
25 
26          if (up)
27          {
28              //向上走;
29              if ((i-1)>=0&&(j+1)<col)
30              {
31                  result.push_back(matrix[i-1][j+1]);
32                  count++;
33                  i=i-1;
34                  j=j+1;     
35              }
36              else 
37              {        
38                  if ((j+1)<col)
39                  {
40                      result.push_back(matrix[i][j+1]);
41                      count++;
42                      j=j+1;
43                  }
44                  else  //error:写成if((j+i)>=col),因为上一个if中j+1可能发生变化,应该用else直接分成两种情况;
45                  {
46                      result.push_back(matrix[i+1][j]);
47                      count++;
48                      i=i+1;
49                  }
50                  
51                   up=false;
52              }
53          }
54          else  //向下走;
55          {
56              
57            if ((i+1)<row&&(j-1)>=0)
58          {
59              result.push_back(matrix[i+1][j-1]);
60              count++;
61              i=i+1;
62              j=j-1;
63             
64          }
65          else
66          {
67             
68              if ((i+1)<row)
69              {
70                  result.push_back(matrix[i+1][j]);
71                  count++;
72                  i=i+1;
73              }
74              else
75              {
76                  result.push_back(matrix[i][j+1]);
77                  count++;
78                  j=j+1;
79              }
80              
81               up=true;
82          }
83          }     
84          
85      }
86      return result;
87  }

参考:

https://blog.csdn.net/guoziqing506/article/details/51602261

原文地址:https://www.cnblogs.com/Tang-tangt/p/8633452.html