稀疏矩阵三元组转置 c++
时间: 2023-11-18 07:56:00 浏览: 182
C和C++实现稀疏矩阵创建、快速转置(数据结构)
5星 · 资源好评率100%
稀疏矩阵是指矩阵中大部分元素为0的矩阵。为了节省存储空间,可以使用三元组来存储稀疏矩阵。三元组存储法是将矩阵中所有非零元素的行、列和值分别存储在三个一维数组中。转置操作是将矩阵的行和列互换,同时将非零元素的行和列也互换。下面是稀疏矩阵三元组转置的C++代码实现:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 100;
struct Triple {
int row, col, val;
};
void Transpose(Triple a[], Triple b[]) {
int num[MAXSIZE] = {0}; // 存储每一列的非零元素个数
int cpot[MAXSIZE] = {0}; // 存储每一列的第一个非零元素在b中的位置
int m = a[0].row, n = a[0].col, t = a[0].val;
b[0].row = n;
b[0].col = m;
b[0].val = t;
if (t == 0) {
return;
}
for (int i = 1; i <= t; i++) {
num[a[i].col]++;
}
for (int i = 1; i < n; i++) {
cpot[i] = cpot[i - 1] + num[i - 1];
}
for (int i = 1; i <= t; i++) {
int col = a[i].col;
int pos = cpot[col]++;
b[pos].row = a[i].col;
b[pos].col = a[i].row;
b[pos].val = a[i].val;
}
}
int main() {
Triple a[MAXSIZE] = {{3, 4, 5}, {0, 1, 7}, {1, 0, 9}, {1, 3, 6}, {2, 3, 8}, {3, 1, 3}};
Triple b[MAXSIZE];
Transpose(a, b);
for (int i = 0; i <= b[0].val; i++) {
cout << b[i].row << " " << b[i].col << " " << b[i].val << endl;
}
return 0;
}
```
阅读全文