用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-01 14:21:37 浏览: 134
稀疏矩阵的加法,c++实现
3星 · 编辑精心推荐
好的,我会根据您的要求进行回答。下面是C语言实现的代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int i;
int j;
int value;
} Triple;
typedef struct {
Triple data[MAX_SIZE + 1];
int rows;
int cols;
int nums;
} TSMatrix;
void CreateMatrix(TSMatrix *M) {
int i, j, k;
printf("请输入矩阵的行数和列数:\n");
scanf("%d%d", &M->rows, &M->cols);
printf("请输入矩阵的非零元素个数:\n");
scanf("%d", &M->nums);
printf("请按照行优先顺序输入非零元素的行、列、值:\n");
for (k = 1; k <= M->nums; k++) {
scanf("%d%d%d", &M->data[k].i, &M->data[k].j, &M->data[k].value);
}
}
void AddMatrix(TSMatrix *M1, TSMatrix *M2, TSMatrix *M3) {
int i, j, k, t;
if (M1->rows != M2->rows || M1->cols != M2->cols) {
printf("两个矩阵的行列数不相等,无法相加!\n");
return;
}
M3->rows = M1->rows;
M3->cols = M1->cols;
k = 1;
t = 1;
while (k <= M1->nums && t <= M2->nums) {
if (M1->data[k].i < M2->data[t].i || (M1->data[k].i == M2->data[t].i && M1->data[k].j < M2->data[t].j)) {
M3->data[k].i = M1->data[k].i;
M3->data[k].j = M1->data[k].j;
M3->data[k].value = M1->data[k].value;
k++;
} else if (M1->data[k].i > M2->data[t].i || (M1->data[k].i == M2->data[t].i && M1->data[k].j > M2->data[t].j)) {
M3->data[k].i = M2->data[t].i;
M3->data[k].j = M2->data[t].j;
M3->data[k].value = M2->data[t].value;
t++;
} else {
M3->data[k].i = M1->data[k].i;
M3->data[k].j = M1->data[k].j;
M3->data[k].value = M1->data[k].value + M2->data[t].value;
k++;
t++;
}
}
while (k <= M1->nums) {
M3->data[k].i = M1->data[k].i;
M3->data[k].j = M1->data[k].j;
M3->data[k].value = M1->data[k].value;
k++;
}
while (t <= M2->nums) {
M3->data[k].i = M2->data[t].i;
M3->data[k].j = M2->data[t].j;
M3->data[k].value = M2->data[t].value;
t++;
}
M3->nums = k - 1;
}
void PrintMatrix(TSMatrix M) {
int i, j, k;
k = 1;
for (i = 1; i <= M.rows; i++) {
for (j = 1; j <= M.cols; j++) {
if (k <= M.nums && M.data[k].i == i && M.data[k].j == j) {
printf("%d ", M.data[k].value);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
int main() {
TSMatrix M1, M2, M3;
CreateMatrix(&M1);
CreateMatrix(&M2);
AddMatrix(&M1, &M2, &M3);
printf("矩阵1:\n");
PrintMatrix(M1);
printf("矩阵2:\n");
PrintMatrix(M2);
printf("矩阵1与矩阵2相加的结果为:\n");
PrintMatrix(M3);
return 0;
}
```
这段代码实现了稀疏矩阵的三元组存储表示,以及稀疏矩阵加法运算。首先通过`CreateMatrix`函数输入两个矩阵的行列数和非零元素,然后通过`AddMatrix`函数实现矩阵加法,最后通过`PrintMatrix`函数输出矩阵。
阅读全文