#题目
两个稀疏矩阵A,B,都用三元组存储,且两个矩阵行列数相同,现在编写一个函数计算C=A+B,并且也用三元组表示出来C,矩阵都为int型
#函数
//先把两个三元组转换成矩阵,然后相加,然后把得到的矩阵转换成三元组
void trimatsum(int A[][3],int B[][3],int C[][3])
{
int m=A[0][1],n=A[0][2],Ak=A[0][0],Bk=B[0][0];
int Amat[m][n],Bmat[m][n],Cmat[m][n];
int p;
for(int i=0;i<m;++i)//A矩阵
{
for(int j=0;j<n;++j)
{
for(p=1;p<=Ak;++p)
{
if(A[p][1]==i && A[p][2]==j)
{
Amat[i][j]=A[p][0];
break;
}
}
if(p>Ak)
{
Amat[i][j]=0;
}
}
}
for(int i=0;i<m;++i)//B矩阵
{
for(int j=0;j<n;++j)
{
for(p=1;p<=Bk;++p)
{
if(i==B[p][1] && j==B[p][2])
{
Bmat[i][j]=B[p][0];
break;
}
}
if(p>Bk)
{
Bmat[i][j]=0;
}
}
}
for(int i=0;i<m;++i)//C矩阵
{
for(int j=0;j<n;++j)
{
Cmat[i][j]=Amat[i][j]+Bmat[i][j];
}
}
//制作C矩阵的三元组
int count=0;//记录C中非零元素个数
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(Cmat[i][j]!=0)
{
++count;
C[count][0]=Cmat[i][j];
C[count][1]=i;
C[count][2]=j;
}
}
}
C[0][0]=count;
C[0][1]=m;
C[0][2]=n;
}
#完整测试程序
#include<iostream>
#define maxSize 3
using namespace std;
//建立三元组存储稀疏矩阵
void createtrimat(int A[][maxSize], int m, int n, int B[][3])
{
int k=0;
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(A[i][j]!=0)
{
++k;
B[k][0]=A[i][j];
B[k][1]=i;
B[k][2]=j;
}
}
B[0][0]=k;
B[0][1]=m;
B[0][2]=n;
}
}
//先把两个三元组转换成矩阵,然后相加,然后把得到的矩阵转换成三元组
void trimatsum(int A[][3],int B[][3],int C[][3])
{
int m=A[0][1],n=A[0][2],Ak=A[0][0],Bk=B[0][0];
int Amat[m][n],Bmat[m][n],Cmat[m][n];
int p;
for(int i=0;i<m;++i)//A矩阵
{
for(int j=0;j<n;++j)
{
for(p=1;p<=Ak;++p)
{
if(A[p][1]==i && A[p][2]==j)
{
Amat[i][j]=A[p][0];
break;
}
}
if(p>Ak)
{
Amat[i][j]=0;
}
}
}
for(int i=0;i<m;++i)//B矩阵
{
for(int j=0;j<n;++j)
{
for(p=1;p<=Bk;++p)
{
if(i==B[p][1] && j==B[p][2])
{
Bmat[i][j]=B[p][0];
break;
}
}
if(p>Bk)
{
Bmat[i][j]=0;
}
}
}
for(int i=0;i<m;++i)//C矩阵
{
for(int j=0;j<n;++j)
{
Cmat[i][j]=Amat[i][j]+Bmat[i][j];
}
}
//制作C矩阵的三元组
int count=0;//记录C中非零元素个数
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(Cmat[i][j]!=0)
{
++count;
C[count][0]=Cmat[i][j];
C[count][1]=i;
C[count][2]=j;
}
}
}
C[0][0]=count;
C[0][1]=m;
C[0][2]=n;
}
int main()
{
int Amat[][3]={{0,1,0},{2,0,0},{0,0,3}},Bmat[][3]={{1,0,0},{0,0,2},{0,4,0}};
int A[100][3],B[100][3],C[100][3];
createtrimat(Amat,3,3,A);
createtrimat(Bmat,3,3,B);
trimatsum(A,B,C);
for(int i=0;i<7;++i)
{
for(int j=0;j<3;++j)
{
cout<<C[i][j]<<" ";
}
cout<<endl;
}
return 0;
}