题目:给定一个稀疏矩阵A(float型),其尺寸为mxn,建立其对应的三元组存储,并通过三元组打印输出矩阵A。
思路:扫描矩阵A,将矩阵A中非零元素的个数、非零元素的值、以及非零元素在原数组中的位置,存到建立的三元组B中。
建立三元组B
/*建立三元组B*/
void createtrimat(float A[][maxSize], int m, int n, float B[][3]){
int k=1;
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
if(A[i][j]!=0){
B[k][0]=A[i][j];
B[k][1]=i;
B[k][2]=j;
++k;
}
B[0][0]=k-1;
B[0][1]=m;
B[0][2]=n;
}
通过三元组打印矩阵A
/*通过三元组打印矩阵A*/
void print(float B[][3]){
int k;
for(int i=0;i<B[0][1];++i){
for(int j=0;j<B[0][2];++j){
if(i==(int)B[k][1] && j==(int)B[k][2]){
cout<<B[k][0]<<" ";
++k;
}
else
cout<<"0 ";
}
cout<<endl;
}
}
在某函数体中的调用
/*在某函数体中的调用*/
{
…
createtrimat(A,5,4,B); //A为5x4的矩阵
print(B);
…
}