稀疏矩阵求转置三元组表c++不使用标准库代码示例
时间: 2023-08-17 09:05:07 浏览: 96
用三元组表实现稀疏矩阵的转制算法
5星 · 资源好评率100%
以下是一个稀疏矩阵转置成三元组表的C++代码示例,不使用标准库:
```c++
#include <iostream>
using namespace std;
const int MAX_SIZE = 100; // 稀疏矩阵最大大小
const int MAX_TERM = 1000; // 稀疏矩阵最大非零元素个数
struct Triple {
int row, col, value; // 行、列、值
};
// 稀疏矩阵转置成三元组表
void transpose(int m, int n, int len, Triple *a, Triple *b) {
int *num = new int[n + 1]; // 存储每一列的非零元素个数
int *cpot = new int[n + 1]; // 存储每一列第一个非零元素在b中的位置
for (int i = 1; i <= n; ++i) {
num[i] = 0;
}
for (int i = 1; i <= len; ++i) {
++num[a[i].col];
}
cpot[1] = 1;
for (int i = 2; i <= n; ++i) {
cpot[i] = cpot[i - 1] + num[i - 1];
}
for (int i = 1; i <= len; ++i) {
int col = a[i].col;
b[cpot[col]].row = a[i].col;
b[cpot[col]].col = a[i].row;
b[cpot[col]].value = a[i].value;
++cpot[col];
}
delete[] num;
delete[] cpot;
}
int main() {
int m, n, len;
Triple a[MAX_TERM], b[MAX_TERM];
cout << "请输入稀疏矩阵的行数、列数和非零元素个数:" << endl;
cin >> m >> n >> len;
cout << "请输入稀疏矩阵的非零元素(行、列、值):" << endl;
for (int i = 1; i <= len; ++i) {
cin >> a[i].row >> a[i].col >> a[i].value;
}
transpose(m, n, len, a, b);
cout << "转置后的三元组表为:" << endl;
for (int i = 1; i <= len; ++i) {
cout << b[i].row << " " << b[i].col << " " << b[i].value << endl;
}
return 0;
}
```
该代码中,`Triple`结构体表示三元组表中的一个元素,`transpose`函数用于将稀疏矩阵转置成三元组表,`main`函数用于读入稀疏矩阵并输出转置后的三元组表。
阅读全文