📅  最后修改于: 2023-12-03 15:14:01.091000             🧑  作者: Mango
这个程序使用 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++ 语言编写算法,并且逐步解释了其中的关键步骤,方便程序员理解和学习。