用C++编写程序请采用三元组的存储表示稀疏矩阵,实现2个稀疏矩阵的加法运算.样例输入:3 4 3 0 1 1 1 2 2 2 1 3 3 4 3 0 2 1 1 3 3 2 1 2。样例输出:0 1 1 0 0 0 2 3 0 5 0 0
时间: 2024-05-04 08:17:26 浏览: 91
好的,我知道了,请稍等一下,我来为您写一个C语言程序。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 稀疏矩阵三元组的最大长度
typedef struct {
int i, j, value; // 三元组的行、列、值
} Triple;
typedef struct {
Triple data[MAXSIZE + 1]; // 三元组表,data[0]未使用
int m, n, len; // 矩阵的行数、列数、非零元素个数
} Matrix;
// 创建稀疏矩阵
void CreateMatrix(Matrix *M) {
printf("请输入矩阵的行数、列数和非零元素个数:\n");
scanf("%d%d%d", &M->m, &M->n, &M->len);
printf("请输入三元组表(行 列 值):\n");
for (int i = 1; i <= M->len; i++) {
scanf("%d%d%d", &M->data[i].i, &M->data[i].j, &M->data[i].value);
}
}
// 稀疏矩阵加法
Matrix AddMatrix(Matrix M1, Matrix M2) {
Matrix M;
int i = 1, j = 1, k = 1;
M.m = M1.m;
M.n = M1.n;
while (i <= M1.len && j <= M2.len) {
if (M1.data[i].i < M2.data[j].i) {
M.data[k] = M1.data[i];
i++;
} else if (M1.data[i].i > M2.data[j].i) {
M.data[k] = M2.data[j];
j++;
} else {
if (M1.data[i].j < M2.data[j].j) {
M.data[k] = M1.data[i];
i++;
} else if (M1.data[i].j > M2.data[j].j) {
M.data[k] = M2.data[j];
j++;
} else {
M.data[k].i = M1.data[i].i;
M.data[k].j = M1.data[i].j;
M.data[k].value = M1.data[i].value + M2.data[j].value;
i++;
j++;
}
}
k++;
}
while (i <= M1.len) {
M.data[k] = M1.data[i];
i++;
k++;
}
while (j <= M2.len) {
M.data[k] = M2.data[j];
j++;
k++;
}
M.len = k - 1;
return M;
}
// 输出稀疏矩阵
void PrintMatrix(Matrix M) {
int k = 1;
for (int i = 1; i <= M.m; i++) {
for (int j = 1; j <= M.n; j++) {
if (k <= M.len && M.data[k].i == i && M.data[k].j == j) {
printf("%d ", M.data[k].value);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
int main() {
Matrix M1, M2, M;
CreateMatrix(&M1);
CreateMatrix(&M2);
M = AddMatrix(M1, M2);
printf("矩阵相加的结果为:\n");
PrintMatrix(M);
return 0;
}
```
这个程序可以先输入两个稀疏矩阵的三元组表示,然后进行加法运算,最后输出结果。您可以根据自己的需要进行修改。
阅读全文