智能机器人对人类影响:c语言:稀疏矩阵的相加的实现

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 05:45:40
#include <stdarg.h>
#define MAXSIZE 100
#define MAXRX 10
typedef struct
{ int i,j;
int e;
}Triple;
typedef struct
{ Triple data[MAXSIZE+1];
int rpos[MAXRX+1];
int mu,nu,tu;
}RL;
int Add(RL M,RL N,RL *Q)
{ int arow,ctemp[10],tp,p,brow,t,q,ccol;
if(M.nu!=N.nu&&M.mu!=N.mu)
return(0);
Q->mu=M.mu;Q->nu=M.nu;Q->tu=0;
if(M.tu+N.tu!=0)
{ for(arow=1;arow<=M.mu;++arow)
{ ctemp[arow]=0;
Q->rpos[arow]=Q->tu+1;
if(arow<M.mu)
tp=M.rpos[arow+1];
else tp=M.tu+1;
for(p=M.rpos[arow];p<tp;++p)
{ brow=M.data[p].i;
if(brow<N.mu) t=N.rpos[brow+1];
else t=N.tu+1;
for(q=N.rpos[brow];q<t;++q)
{ ccol=N.data[q].j;
ctemp[ccol]+=M.data[p].e+N.data[q].e;
}
}

for(ccol=1;ccol<=Q->nu;++ccol)
if(ctemp[ccol])
{ if(++Q->tu>MAXSIZE) return(0);
Q->data[Q->tu].i=arow;
Q->data[Q->tu].j=ccol;
Q->data[Q->tu].e=ctemp[ccol];
}
}
}
}
int init(RL *M,RL *N)
{ M->mu=0;M->nu=0;M->tu=0;
N->mu=0;N->nu=0;M->tu=0;
}
int Input(RL *M,int m,int n)
{ int row,col,val,k=0;
M->mu=m;M->nu=n;
printf("Please input datum:");
scanf("%d,%d,%d",&row,&col,&val);
while(row!=0)
{ k++;
M->data[k].i=row;
M->data[k].j=col;
M->data[k].e=val;
scanf("%d,%d,%d",&row,&col,&val);
}
M->tu=k;
}
int Output(RL Q)
{ int a;
printf("(");
for(a=1;a<Q.tu+1;a++)
{ printf("(%d,%d,%d)",Q.data[a].i,Q.data[a].j,Q.data[a].e);
}
printf(")");
}
main()
{ RL M,N,Q;
int m,n;
init(&M,&N);
printf("please input row and col:");
scanf("%d,%d",&m,&n);
printf("Please input M:");
Input(&M,m,n);
printf("Please input N:");
Inputs(&N,m,n);
Add(M,N,&Q);
Output(Q);
}
int Inputs(RL *N,int m,int n)
{ int row,col,val,k=0;
N->mu=m;N->nu=n;
printf("Please input datum:");
scanf("%d,%d,%d",&row,&col,&val);
while(row!=0)
{ k++;
N->data[k].i=row;
N->data[k].j=col;
N->data[k].e=val;
scanf("%d,%d,%d",&row,&col,&val);
}
N->tu=k;
}

以上是我编的代码,谁能帮忙改一下,让它实现这个功能.我估计在Add函数里有毛病,请各位大侠帮小弟修改一下.改的好会有追加分.

课本上不是有现成的么?