首页 > 编程知识 正文

c语言稀疏矩阵的加法和乘法,c语言稀疏矩阵相加

时间:2023-05-06 09:38:36 阅读:264817 作者:2695

稀疏矩阵加法

给定两个矩阵A和B,求其和矩阵C=A+B。

输入格式:

第一行包含两个数Row和Col,分别表示矩阵的行数和列数,A和B的维度是一致的。

第二行只有一个数N​​1​​,表示接下来要输入的A中的非零元素的个数。

接下来是N1行,每一行都是i j A[i,j] 这样的形式,表示的A中第i行第j列的元素A[i,j],为了与大多数编程语言保持一致,它们都是从零开始的,也就是说下标的有效范围是[0,Row−1]×[0,Col−1]。

在N1行之后,是一个数N2,表示矩阵B中非零元素的数量,此后N2行描述B中的非零元素,它们与此前描述A中非零元素的形式一致。

矩阵元素的输入均遵循行主序。这里的所有的输入均可用int类型正确表示,可以假设输入均是合法的。

输出格式:

第一行输出和矩阵C=A+B中的绝对值大于0.1的元素个数N3,此后是N3行,按照行主序输出其中的非零元素,依次是行、列的下标和对应的元素。

输入样例: 2 211 1 110 0 1 输出样例: 20 0 11 1 1 完整代码 #include<stdio.h>#include<stdlib.h>#define MAX 100typedef struct {int i,j;//行,列int data;} matrix;int main() {matrix a[MAX];matrix b[MAX];matrix c[MAX];int row;int col;int n1,n2,n3;int k,t;scanf("%d %d",&row,&col);scanf("%d",&n1);int arr1[n1][3];for(k=0; k<n1; k++) {for(t=0; t<3; t++) {scanf("%d",&arr1[k][t]);if(t==0) {a[k].i=arr1[k][t];}if(t==1) {a[k].j=arr1[k][t];}if(t==2) {a[k].data=arr1[k][t];}}}//输入矩阵a的非零元素位置及数值,并将其存入结构体中scanf("%d",&n2);int arr2[n2][3];for(k=0; k<n2; k++) {for(t=0; t<3; t++) {scanf("%d",&arr2[k][t]);if(t==0) {b[k].i=arr2[k][t];}if(t==1) {b[k].j=arr2[k][t];}if(t==2) {b[k].data=arr2[k][t];}}}//输入矩阵b的非零元素位置及数值,并将其存入结构体中//两矩阵元素相加int m=0,n=0;t=0;int temp;while(m<n1&&n<n2) {if(a[m].i==b[n].i) {if(a[m].j==b[n].j) {temp=a[m].data+b[m].data;if(temp!=0) {c[t].i=a[m].i;c[t].j=a[m].j;c[t].data=temp;t++;}m++;n++;continue;}if(a[m].j<b[n].j) {c[t].i=a[m].i;c[t].j=a[m].j;c[t].data=a[m].data;t++;m++;continue;}if(a[m].j>b[n].j) {c[t].i=b[n].i;c[t].j=b[n].j;c[t].data=b[n].data;t++;n++;continue;}}if(a[m].i<b[n].i) {c[t].i=a[m].i;c[t].j=a[m].j;c[t].data=a[m].data;t++;m++;continue;}if(a[m].i>b[n].i) {c[t].i=b[n].i;c[t].j=b[n].j;c[t].data=b[n].data;t++;n++;continue;}}int p;//a矩阵还有非零元素if(m<n1) {for(p=m; p<n1; p++) {c[t].i=a[p].i;c[t].j=a[p].j;c[t].data=a[p].data;t++;}}//b矩阵还有非零元素if(n<n2) {for(p=n; p<n2; p++) {c[t].i=b[p].i;c[t].j=b[p].j;c[t].data=b[p].data;t++;}}int q;printf("%dn",t);for(q=0; q<t; q++) {if(c[q].data>0.1) {printf("%d %d %dn",c[q].i,c[q].j,c[q].data);}}return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。