C++稀疏矩阵的转置
时间: 2024-05-12 19:09:37 浏览: 107
稀疏矩阵实现和快速转置(C++)
5星 · 资源好评率100%
稀疏矩阵的转置是将矩阵行和列上的元素对换。在C++中,可以使用三元组存储稀疏矩阵,转置时只需要交换每个三元组的行号和列号即可。具体实现步骤如下:
1. 定义一个结构体来存储三元组,包括行号、列号和值。
2. 定义一个数组来存储原始稀疏矩阵的三元组。
3. 遍历原始稀疏矩阵的三元组,将每个三元组的行号和列号交换,并将交换后的三元组存储到一个新的数组中。
4. 对新的数组按照行号进行排序。
5. 遍历新的数组,按照要求输出转置后的稀疏矩阵。
下面是一个简单的C++代码示例:
```
#include <iostream>
#include <algorithm>
using namespace std;
struct Triplet {
int row, col, value;
};
bool cmp(Triplet a, Triplet b) {
return a.row < b.row;
}
int main() {
int r, c;
cin >> r >> c;
Triplet matrix[r * c];
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
int value;
cin >> value;
if (value != 0) {
matrix[i * c + j].row = i;
matrix[i * c + j].col = j;
matrix[i * c + j].value = value;
}
}
}
Triplet transpose[r * c];
for (int i = 0; i < r * c; i++) {
transpose[i].row = matrix[i].col;
transpose[i].col = matrix[i].row;
transpose[i].value = matrix[i].value;
}
sort(transpose, transpose + r * c, cmp);
for (int i = 0; i < c; i++) {
for (int j = 0; j < r; j++) {
int value = 0;
for (int k = 0; k < r * c; k++) {
if (transpose[k].row == j && transpose[k].col == i) {
value = transpose[k].value;
break;
}
}
cout << value << " ";
}
cout << endl;
}
return 0;
}
```
阅读全文