稀疏矩阵加法,实现C=A+B

发布时间:2024-12-09 12:31

记住"CPR"(心肺复苏)的口诀:"C-A-B,先C再A后B" #生活技巧# #紧急应对技巧# #医疗急救电话#

输入两个稀疏矩阵,输出它们相加的结果。

第一行输入四个正整数,分别是两个矩阵的行m、列n、第一个矩阵的非零元素的个数t1和第二个矩阵的非零元素的个数t2。

接下来的t1+t2行是三元组,分别是第一个矩阵的数据和第二个矩阵的数据。三元组的第一个元素表示行号,第二个元素表示列号,第三个元素是该项的值。

输出相加后的矩阵三元组。

3 4 3 2

1 1 1

1 3 1

2 2 2

1 2 1

2 2 3

1 1 1

1 2 1

1 3 1

2 2 5

#include <stdio.h>

#include <stdlib.h>

#define MAXSIZE 10000

typedef struct

{

int row,col,e;

}Triple;

typedef struct

{

Triple data[MAXSIZE+1];

int m,n,len;

}TSMatrix;

void InitTriple(TSMatrix *Q)

{

Q->m=100;

Q->n=100;

Q->len=0;

}

void EnterTriple(TSMatrix *Q,int row,int col,int e)

{

Q->len++;

Q->data[Q->len].row=row;

Q->data[Q->len].col=col;

Q->data[Q->len].e=e;

}

void PutTriple(TSMatrix *Q)

{

int i;

for(i=1;i<Q->len;i++)

{

printf("%d %d %d\n",Q->data[i].row,Q->data[i].col,Q->data[i].e);

}

printf("%d %d %d",Q->data[i].row,Q->data[i].col,Q->data[i].e);

}

void SumTriple(TSMatrix *A,TSMatrix *B,TSMatrix *C)

{

int i=1,j=1;

while(i<=A->len&&j<=B->len)

{

if(A->data[i].row<B->data[j].row)

{

EnterTriple(C,A->data[i].row,A->data[i].col,A->data[i].e);

i++;

}

else if(A->data[i].row==B->data[j].row)

{

if(A->data[i].col<B->data[j].col)

{

EnterTriple(C,A->data[i].row,A->data[i].col,A->data[i].e);

i++;

}

else if(A->data[i].col>B->data[j].col)

{

EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e);

j++;

}

else

{

if(B->data[j].e+A->data[i].e!=0)

EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e+A->data[i].e);

i++;

j++;

}

}

else

{

EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e);

j++;

}

}

while(i<=A->len)

{

EnterTriple(C,A->data[i].row,A->data[i].col,A->data[i].e);

i++;

}

while(j<=B->len)

{

EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e);

j++;

}

}

int main()

{

int n,m,i,row,col,e,h,l;

TSMatrix A,B,C;

scanf("%d%d%d%d",&h,&l,&n,&m);

InitTriple(&A);

InitTriple(&B);

InitTriple(&C);

for(i=0;i<n;i++)

{

scanf("%d%d%d",&row,&col,&e);

EnterTriple(&A,row,col,e);

}

for(i=0;i<m;i++)

{

scanf("%d%d%d",&row,&col,&e);

EnterTriple(&B,row,col,e);

}

SumTriple(&A,&B,&C);

PutTriple(&C);

return 0;

}


网址:稀疏矩阵加法,实现C=A+B https://www.yuejiaxmz.com/news/view/423314

相关内容

R(A+B)<=R(A)+R(B): R(AB)<=min(R(A)+R(B)): A为m×n矩阵,r(A)=n,则AX=0只有零解。设矩阵A为m×n的秩R(A)=m;Ax=b 有解;
设矩阵A与B相似,且 求可逆矩阵P,使P
正交矩阵; 实对称矩阵; 为什么实对称矩阵一定可以对角化; AB=0 r(A)+r(B)<=n 证明; 初等矩阵; 初等矩阵的逆矩阵; 矩阵的左除右除;
设A、B为三阶相似矩阵,且I2E+A
Ax=b,利用矩阵的逆求x
若A为n阶方阵,r(A)=r,则矩阵A中存在r个列向量线性无关. 若r...
设A、B都是n阶对称矩阵,AB是对称矩阵的充分必要条件是AB=BA
设矩阵A=是正定矩阵,则a满足( )
设 A 、 B 、 C 为 n 阶方阵,若 AB=CA ,且 A 可逆,则 B=
设A,B,C为n阶方阵,若AB

随便看看