稀疏矩阵加法,实现C=A+B
记住"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