数据结构与算法:矩阵的转置

数据结构与算法:如何实现矩阵的转置(二行三列转成三行二列)?


#include <iostream>
#include <vector>

std::vector<std::vector<int>> transposeMatrix(const std::vector<std::vector<int>>& matrix) {
    int rows = matrix.size();
    int cols = matrix[0].size();

    std::vector<std::vector<int>> transposedMatrix(cols, std::vector<int>(rows));

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transposedMatrix[j][i] = matrix[i][j];
        }
    }

    return transposedMatrix;
}

int main() {
    std::vector<std::vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}};
    std::vector<std::vector<int>> transposedMatrix = transposeMatrix(matrix);

    for (int i = 0; i < transposedMatrix.size(); i++) {
        for (int j = 0; j < transposedMatrix[i].size(); j++) {
            std::cout << transposedMatrix[i][j] << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 虚拟头结点的单链表小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    问题标题: 矩阵的转置算法

    问题内容: 请问如何使用数据结构与算法实现矩阵的转置?我有一个二行三列的矩阵,想将其转换为三行二列的矩阵。你能给予一些指导吗?

    回答: 矩阵的转置是指将原矩阵的行变为列,列变为行的操作。为了实现矩阵的转置,可以按照行列的顺序遍历原矩阵,将每个元素放置到转置后的位置上。

    具体的实现过程如下所示:

    1. 创建一个新的二维数组,用于存储转置后的矩阵。新的二维数组的行数等于原矩阵的列数,列数等于原矩阵的行数。

    2. 使用两个嵌套的循环,依次遍历原矩阵的每个元素。

    3. 外层循环用于遍历原矩阵的每一行,循环变量i表示当前行号。

    4. 内层循环用于遍历原矩阵的每一列,循环变量j表示当前列号。

    5. 在内层循环中,将原矩阵中的元素matrix[i][j]复制到转置后矩阵的对应位置transpose[j][i]。

    6. 循环结束后,转置后的矩阵transpose即为所求。

    下面是使用C++语言编写的示例代码:

    #include <iostream>
    using namespace std;
    
    const int ROW = 2;  // 原矩阵的行数
    const int COL = 3;  // 原矩阵的列数
    
    void transposeMatrix(int matrix[ROW][COL], int transpose[COL][ROW]) {
        for (int i = 0; i < ROW; i++) {
            for (int j = 0; j < COL; j++) {
                transpose[j][i] = matrix[i][j];
            }
        }
    }
    
    int main() {
        int matrix[ROW][COL] = {{1, 2, 3},
                                {4, 5, 6}};
        int transpose[COL][ROW];
    
        transposeMatrix(matrix, transpose);
    
        cout << "转置后的矩阵:" << endl;
        for (int i = 0; i < COL; i++) {
            for (int j = 0; j < ROW; j++) {
                cout << transpose[i][j] << " ";
            }
            cout << endl;
        }
    
        return 0;
    }
    

    运行以上代码,输出结果为:

    转置后的矩阵:
    1 4 
    2 5 
    3 6 
    

    可以看到,原矩阵 {{1, 2, 3}, {4, 5, 6}} 被成功转置为 {{1, 4}, {2, 5}, {3, 6}}。该示例代码使用了一个二维数组来存储原矩阵和转置后的矩阵,通过遍历和赋值操作实现了矩阵的转置。

    希望以上回答能满足您的需求,请您检查代码并测试应答代码。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^