用C语言代码合并两个稀疏矩阵M和N为一个矩阵A
时间: 2024-02-28 11:52:26 浏览: 35
可以使用三元组存储稀疏矩阵,并利用稀疏矩阵加法的原理,将两个稀疏矩阵M和N的值相加得到一个新的稀疏矩阵A。
以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int row; // 行
int col; // 列
int val; // 值
} Triple;
typedef struct {
Triple* data;
int m, n, len;
} Matrix;
void create_matrix(Matrix* mat, int m, int n, int len) {
mat->m = m;
mat->n = n;
mat->len = len;
mat->data = (Triple*)malloc(len * sizeof(Triple));
}
void input_matrix(Matrix* mat) {
int i;
printf("请输入行数、列数、非零元素个数:");
scanf("%d%d%d", &mat->m, &mat->n, &mat->len);
mat->data = (Triple*)malloc(mat->len * sizeof(Triple));
printf("请输入三元组(行、列、值):\n");
for (i = 0; i < mat->len; i++) {
scanf("%d%d%d", &mat->data[i].row, &mat->data[i].col, &mat->data[i].val);
}
}
void output_matrix(Matrix mat) {
int i, j, k = 0;
for (i = 1; i <= mat.m; i++) {
for (j = 1; j <= mat.n; j++) {
if (k < mat.len && mat.data[k].row == i && mat.data[k].col == j) {
printf("%d ", mat.data[k].val);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
void add_matrix(Matrix M, Matrix N, Matrix* A) {
int i = 0, j = 0, k = 0, t = 0;
if (M.m != N.m || M.n != N.n) {
printf("两个矩阵的行列数不相等,无法相加!\n");
return;
}
A->m = M.m;
A->n = M.n;
A->data = (Triple*)malloc((M.len + N.len) * sizeof(Triple));
while (i < M.len && j < N.len) {
if (M.data[i].row < N.data[j].row) {
A->data[k++] = M.data[i++];
} else if (M.data[i].row > N.data[j].row) {
A->data[k++] = N.data[j++];
} else {
if (M.data[i].col < N.data[j].col) {
A->data[k++] = M.data[i++];
} else if (M.data[i].col > N.data[j].col) {
A->data[k++] = N.data[j++];
} else {
t = M.data[i].val + N.data[j].val;
if (t != 0) {
A->data[k].row = M.data[i].row;
A->data[k].col = M.data[i].col;
A->data[k].val = t;
k++;
}
i++;
j++;
}
}
}
while (i < M.len) {
A->data[k++] = M.data[i++];
}
while (j < N.len) {
A->data[k++] = N.data[j++];
}
A->len = k;
}
int main() {
Matrix M, N, A;
input_matrix(&M);
input_matrix(&N);
create_matrix(&A, 0, 0, M.len + N.len);
add_matrix(M, N, &A);
printf("矩阵 M:\n");
output_matrix(M);
printf("矩阵 N:\n");
output_matrix(N);
printf("矩阵 A = M + N:\n");
output_matrix(A);
free(M.data);
free(N.data);
free(A.data);
return 0;
}
```
运行示例:
```
请输入行数、列数、非零元素个数:3 3 3
请输入三元组(行、列、值):
1 1 1
2 2 2
3 3 3
请输入行数、列数、非零元素个数:3 3 3
请输入三元组(行、列、值):
1 1 2
2 2 3
3 3 4
矩阵 M:
1 0 0
0 2 0
0 0 3
矩阵 N:
2 0 0
0 3 0
0 0 4
矩阵 A = M + N:
3 0 0
0 5 0
0 0 7
```