[宝典]稀疏矩阵加法运算
稀疏矩阵加法运算
//用三元组表示稀疏矩阵,并且求和 #include "Stdio.h"
# define MAXSIZE 20 /*假设非零元个数的最大值为10*/ struct Triple
{
int i,j; /*该非零元的行下标和列下标*/
int e;
};
struct TSMtrix
{
struct Triple data[MAXSIZE+1]; /*非零元三元组表,data[0]未用*/
int mu,nu,tu; /*矩阵的行数、列数和非零元个数*/ };
CreateMtrix(struct TSMtrix *M) { /*创建一个稀疏矩阵*/
int i,date,col,row,mu,nu,tu;
printf("please input matrix col,row,unzeroed numbers:\n");
scanf("%d,%d,%d",&mu,&nu,&tu);
M->mu=mu;
M->nu=nu;
M->tu=tu;
printf("请输入行 列 值:\n");
for (i=1;i<=tu;i++)
{
scanf("%d,%d,%d",&col,&row,&date);
if ( mu<0 || nu<0 )
{
printf("error!");
}
else
{
M->data[i].i=col;
M->data[i].j=row;
M->data[i].e=date;
}
}
}
int AddMtrix(struct TSMtrix A,struct TSMtrix B,struct TSMtrix *C)
{ int pa=1,pb=1,pc=1,x,ce; C->mu=A.mu;C->nu=A.nu;C->tu=0;
for(x=0;x<=A.mu;x++)
{
while(A.data[pa].idata[pc].i=x;
C->data[pc].j=A.data[pa].j;
C->data[pc].e=ce;
pa++;pb++;pc++; }
else{
pa++;
pb++;
}
}
else if(A.data[pa].j>B.data[pb].j)
{
C->data[pc].i=x;
C->data[pc].j=B.data[pb].j;
C->data[pc].e=B.data[pb].e;
pb++;pc++;
}
else
{
C->data[pc].i=x;
C->data[pc].j=A.data[pa].j;
C->data[pc].e=A.data[pa].e;
pa++;pc++;
}
}
while(A.data[pa].i==x) /* 把A中剩下的元素传给C */
{
C->data[pc].i=x;
C->data[pc].j=A.data[pa].j;
C->data[pc].e=A.data[pa].e;
pa++;pc++;
}
while(B.data[pb].i==x) /* 把B中剩下的元素传给C */
{
C->data[pc].i=x;
C->data[pc].j=B.data[pb].j;
C->data[pc].e=B.data[pb].e;
pb++;pc++;
}
}
C->tu=pc;
}
ShowMtrix(struct TSMtrix M) { /*打印出矩阵*/
int i=1,j=1,dir=1,flag;
printf("The matrix is:\n");
for (i=1;i<=M.mu;i++)
{
for (j=1;j<=M.nu;j++)
{ flag=0;
for(dir=1;dir<=M.tu;dir++)
if (M.data[dir].i==i && M.data[dir].j==j) /*存在非零元*/
{
printf("%d ",M.data[dir].e);
flag=1;
}
if(flag==0)
printf("0 ");
}
printf("\n");
}
}
main()
{struct TSMtrix M,T,P;
CreateMtrix(&M);
CreateMtrix(&T);
ShowMtrix(M) ;
ShowMtrix(T) ;
if(AddMtrix(M,T,&P)==1) printf("EERROR!!"); else {
AddMtrix(M,T,&P); ShowMtrix(P) ;} getch();
本文档为【[宝典]稀疏矩阵加法运算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。