C++程序 按Zig-Zag的方式打印矩阵

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的方式打印矩阵,希望这篇文章能够帮助到您!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例