C++程序 按Zig-Zag的方式打印矩阵
矩阵是一个常见的数据结构,可以通过行和列来描述。在本篇文章中,我们将探讨如何按Zig-Zag的方式打印矩阵,并提供C++代码示例。
演示
首先,让我们来看一个矩阵示例:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
按Zig-Zag的方式打印该矩阵的结果应该是:
1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16
在Zig-Zag模式下,我们先打印第一行,然后向下打印斜线,然后再打印下一行,最后再向上打印斜线,然后重复这个过程直到打印所有元素。
分析
接下来,让我们来分析这个问题的解决方案。
我们可以用两个变量i和j来记录当前的位置。我们从左上角(i=0,j=0)开始打印第一行,然后向下打印斜线,这时i增加了1,j减少了1。当j为负数时,我们则将j设置为0,表示我们现在在第一列。然后我们继续向下打印下一列,然后向上打印斜线,这时i减少了1,j增加了1。当i为负数时,我们将i设置为0,表示我们现在在第一行。我们一直重复这个过程直到打印出所有元素。
让我们来看一下C++程序示例:
#include <iostream>
#include <vector>
using namespace std;
void printZigZag(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
int i = 0, j = 0;
for(int k = 0; k < m * n; k++) {
cout << matrix[i][j] << " ";
if((i + j) % 2 == 0) {
if(j == n - 1) {
i++;
} else if(i == 0) {
j++;
} else {
i--;
j++;
}
}
else {
if(i == m - 1) {
j++;
} else if(j == 0) {
i++;
} else {
i++;
j--;
}
}
}
}
int main() {
vector<vector<int>> matrix{{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};
printZigZag(matrix);
return 0;
}
在上面的程序中,我们首先定义了一个grade型向量matrix,它保存了我们要打印的矩阵。我们用两个循环变量i和j来记录当前的位置。然后我们使用for循环来遍历所有元素。我们首先打印出矩阵中当前位置的元素,然后根据所在位置更新i和j。如果i+j是偶数,那么我们向上或向下移动,并根据当前的位置决定我们是向左下角或向右上角移动。如果i+j是奇数,我们向左或向右移动,并根据当前的位置决定我们是向上还是向下移动。
结论
在本篇文章中,我们讲解了如何按Zig-Zag的方式打印矩阵,并提供了C ++代码示例。通过使用两个变量i和j来记录当前的位置,并根据当前的位置决定我们需要向上,向下,向左或向右移动,我们能够轻松地完成矩阵的Zig-Zag打印。这种方法非常简单,易于实现,并且时间复杂度为O(mn),其中m和n分别表示矩阵的行数和列数。如果您需要按Zig-Zag的方式打印矩阵,希望这篇文章能够帮助到您!