用c语言编写程序实现两个稀疏矩阵的乘积。
时间: 2024-02-06 11:12:30 浏览: 73
数据结构之稀疏矩阵抽象数据类型的实现
4星 · 用户满意度95%
好的,这是一个有趣的问题。以下是一个简单的C语言程序,可以计算两个稀疏矩阵的乘积:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int row, col, value;
} Element;
typedef struct {
int row, col, num;
Element *data;
} SparseMatrix;
void createSparseMatrix(SparseMatrix *matrix) {
printf("Enter the number of rows: ");
scanf("%d", &matrix->row);
printf("Enter the number of columns: ");
scanf("%d", &matrix->col);
printf("Enter the number of non-zero elements: ");
scanf("%d", &matrix->num);
matrix->data = (Element *)malloc(matrix->num * sizeof(Element));
printf("Enter the elements in the format (row, column, value):\n");
for (int i = 0; i < matrix->num; i++) {
scanf("%d %d %d", &matrix->data[i].row, &matrix->data[i].col, &matrix->data[i].value);
}
}
void printSparseMatrix(SparseMatrix matrix) {
printf("\n");
int k = 0;
for (int i = 0; i < matrix.row; i++) {
for (int j = 0; j < matrix.col; j++) {
if (k < matrix.num && i == matrix.data[k].row && j == matrix.data[k].col) {
printf("%d ", matrix.data[k++].value);
} else {
printf("0 ");
}
}
printf("\n");
}
}
void multiplySparseMatrix(SparseMatrix matrix1, SparseMatrix matrix2, SparseMatrix *result) {
if (matrix1.col != matrix2.row) {
printf("Error: Invalid matrix dimensions\n");
return;
}
result->row = matrix1.row;
result->col = matrix2.col;
result->num = 0;
result->data = (Element *)malloc(result->row * result->col * sizeof(Element));
int *temp = (int *)calloc(matrix2.col, sizeof(int));
for (int i = 0; i < matrix1.row; i++) {
int k = 0;
for (int j = 0; j < matrix2.col; j++) {
int sum = 0;
while (k < matrix1.num && matrix1.data[k].row == i) {
int col = matrix1.data[k].col;
int val = matrix1.data[k].value;
sum += val * matrix2.data[col * matrix2.col + j].value;
k++;
}
if (sum != 0) {
result->data[result->num].row = i;
result->data[result->num].col = j;
result->data[result->num].value = sum;
result->num++;
}
}
}
}
int main() {
SparseMatrix matrix1, matrix2, result;
printf("Enter the first matrix:\n");
createSparseMatrix(&matrix1);
printf("Enter the second matrix:\n");
createSparseMatrix(&matrix2);
multiplySparseMatrix(matrix1, matrix2, &result);
printf("\nProduct of the two matrices:\n");
printSparseMatrix(result);
return 0;
}
```
这个程序定义了两个结构体:`Element` 和 `SparseMatrix`,分别表示一个元素和一个稀疏矩阵。`Element` 结构体包含了一个元素的行、列和值,`SparseMatrix` 结构体包含了一个稀疏矩阵的行、列、非零元素个数和数据。
程序中的 `createSparseMatrix` 函数用于创建一个稀疏矩阵, `printSparseMatrix` 函数用于打印一个稀疏矩阵, `multiplySparseMatrix` 函数用于计算两个稀疏矩阵的乘积。
主函数中,我们首先调用 `createSparseMatrix` 函数两次分别创建两个稀疏矩阵,然后调用 `multiplySparseMatrix` 函数计算它们的乘积,最后调用 `printSparseMatrix` 函数打印结果矩阵。
需要注意的是,这里的程序实现了稀疏矩阵的乘积,所以输入的矩阵必须是稀疏矩阵。如果要计算普通矩阵的乘积,需要用到常规的矩阵乘法算法,这里不再赘述。
阅读全文