C语言实现稀疏矩阵相加算法 - 三元组顺序表
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int i, j;
int value;
} Triple;
typedef struct {
Triple data[MAXSIZE + 1];
int m, n;
int len;
} TSMatrix;
// 初始化稀疏矩阵
void InitMatrix(TSMatrix *M) {
M->len = 0;
printf("请输入稀疏矩阵的行数和列数:\n");
scanf("%d%d", &M->m, &M->n);
printf("请输入稀疏矩阵的非零元个数:\n");
scanf("%d", &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);
}
}
// 矩阵相加
int Add(TSMatrix A, TSMatrix B, TSMatrix *C) {
if (A.m != B.m || A.n != B.n) {
return 0;
}
int i = 1, j = 1, k = 0;
while (i <= A.len && j <= B.len) {
if (A.data[i].i < B.data[j].i) {
C->data[++k] = A.data[i++];
} else if (A.data[i].i > B.data[j].i) {
C->data[++k] = B.data[j++];
} else {
if (A.data[i].j < B.data[j].j) {
C->data[++k] = A.data[i++];
} else if (A.data[i].j > B.data[j].j) {
C->data[++k] = B.data[j++];
} else {
int sum = A.data[i].value + B.data[j].value;
if (sum != 0) {
C->data[++k].i = A.data[i].i;
C->data[k].j = A.data[i].j;
C->data[k].value = sum;
}
i++;
j++;
}
}
}
while (i <= A.len) {
C->data[++k] = A.data[i++];
}
while (j <= B.len) {
C->data[++k] = B.data[j++];
}
C->m = A.m;
C->n = A.n;
C->len = k;
return 1;
}
// 输出稀疏矩阵
void PrintMatrix(TSMatrix M) {
printf("稀疏矩阵的三元组为:\n");
for (int i = 1; i <= M.len; i++) {
printf("%d %d %d\n", M.data[i].i, M.data[i].j, M.data[i].value);
}
}
int main() {
TSMatrix A, B, C;
printf("请输入矩阵A:\n");
InitMatrix(&A);
printf("请输入矩阵B:\n");
InitMatrix(&B);
if (Add(A, B, &C)) {
printf("矩阵相加成功!\n");
PrintMatrix(C);
} else {
printf("矩阵相加失败!\n");
}
return 0;
}
原文地址: http://www.cveoy.top/t/topic/nIKv 著作权归作者所有。请勿转载和采集!