📜  C++程序以蛇模式打印矩阵(1)

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

C++程序以蛇模式打印矩阵

蛇模式打印矩阵是一种常见的算法考察题目,它的难点在于如何确定蛇行的方向和打印的顺序。下面我们使用C++语言给出一种实现。

代码实现
#include <iostream>
#include <vector>

using namespace std;

void printMatrix(vector<vector<int>> matrix) {
    int rows = matrix.size(); // 矩阵的行数
    int cols = matrix[0].size(); // 矩阵的列数
    int row = 0, col = 0; // 起始位置
    int direction = 1; // 蛇行的方向,1表示向右,-1表示向左
    for (int i = 0; i < rows * cols; i++) {
        cout << matrix[row][col] << " ";
        if (direction == 1) { // 向右走
            if (col == cols - 1) { // 到了最右边,需要掉头
                row++;
                direction = -1;
            } else if (row == 0) { // 到了最上面,需要掉头
                col++;
                direction = -1;
            } else { // 没到边界时继续向右走
                row--;
                col++;
            }
        } else { // 向左走
            if (row == rows - 1) { // 到了最下面,需要掉头
                col++;
                direction = 1;
            } else if (col == 0) { // 到了最左边,需要掉头
                row++;
                direction = 1;
            } else { // 没到边界时继续向左走
                row++;
                col--;
            }
        }
    }
}

int main() {
    vector<vector<int>> matrix = {{1,2,3}, {4,5,6}, {7,8,9}};
    printMatrix(matrix);
    return 0;
}
代码解释
  • printMatrix函数中,我们首先获取矩阵的行数和列数,以及起始位置和蛇行的方向。然后使用一个for循环遍历矩阵中的所有元素。

  • 在每次遍历的过程中,我们先打印当前位置的元素,然后根据蛇行的方向决定下一步往哪里走。如果向右走,我们需要判断是否到了最右边或者最上面,如果是的话,就需要调整方向;如果没有到边界,就继续向右走。如果向左走,也是类似的逻辑。

  • 最后,在主函数中我们只需要调用printMatrix函数,并传入一个测试用的矩阵即可。

总结

通过这个程序的实现,我们可以看到一个比较典型的算法思路:先找到规律,然后根据规律调整代码实现。蛇模式打印矩阵虽然看起来比较麻烦,但只要找到规律,就可以比较容易地解决问题。