数据结构与算法:如何实现矩阵的转置(二行三列转成三行二列)?
#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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:问题标题: 矩阵的转置算法
问题内容: 请问如何使用数据结构与算法实现矩阵的转置?我有一个二行三列的矩阵,想将其转换为三行二列的矩阵。你能给予一些指导吗?
回答: 矩阵的转置是指将原矩阵的行变为列,列变为行的操作。为了实现矩阵的转置,可以按照行列的顺序遍历原矩阵,将每个元素放置到转置后的位置上。
具体的实现过程如下所示:
创建一个新的二维数组,用于存储转置后的矩阵。新的二维数组的行数等于原矩阵的列数,列数等于原矩阵的行数。
使用两个嵌套的循环,依次遍历原矩阵的每个元素。
外层循环用于遍历原矩阵的每一行,循环变量i表示当前行号。
内层循环用于遍历原矩阵的每一列,循环变量j表示当前列号。
在内层循环中,将原矩阵中的元素matrix[i][j]复制到转置后矩阵的对应位置transpose[j][i]。
循环结束后,转置后的矩阵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}}。该示例代码使用了一个二维数组来存储原矩阵和转置后的矩阵,通过遍历和赋值操作实现了矩阵的转置。
希望以上回答能满足您的需求,请您检查代码并测试应答代码。