📜  C++ 程序以 zag-zag 方式打印矩阵(1)

📅  最后修改于: 2023-12-03 15:14:01.091000             🧑  作者: Mango

C++ 程序以 zag-zag 方式打印矩阵

这个程序使用 C++ 语言编写,旨在以 zig-zag 方式打印给定矩阵,即先从左到右,再从右到左,然后重复这个步骤。这个算法的时间复杂度为 O(M*N),其中 M 和 N 分别是矩阵的行数和列数。

编写代码
#include <iostream>
#include <vector>

using namespace std;

void printZigZag(vector<vector<int>>& matrix) {
    int m = matrix.size();
    if (m == 0) return;
    int n = matrix[0].size();
    int i = 0, j = 0;
    bool isUp = true;
    while (i < m && j < n) {
        cout << matrix[i][j] << " ";
        if ((i == 0 || i == m - 1) && j < n - 1) {
            j++;
            isUp = !isUp;
        } else if ((j == 0 || j == n - 1) && i < m - 1) {
            i++;
            isUp = !isUp;
        } else if (isUp) {
            i--;
            j++;
        } else {
            i++;
            j--;
        }
    }
}

int main() {
    vector<vector<int>> matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
    printZigZag(matrix);
    return 0;
}
代码解析

这个算法的核心思想是使用四个变量 i、j、isUp 和 m、n 分别表示当前打印到的位置、当前移动的方向、是否是向上移动和矩阵的行数和列数。在打印的每个位置,我们都需要考虑当前是不是在矩阵的边界上,然后根据当前的方向来移动到下一个位置,并且在移动方向上反转 isUp 变量的值。

总结

这个程序可以帮助我们了解如何以 zig-zag 方式打印矩阵,并且利用 vector 类型的数据结构存储矩阵。同时,这个程序也展示了如何使用 C++ 语言编写算法,并且逐步解释了其中的关键步骤,方便程序员理解和学习。