稀疏矩阵相乘
status multy_matrix(matrix M,matrix N,matrix &Q){
int ctemp[MAXRC+1], arow,brow,p,q,tm,i,ccol,tp;
//see wheather the two matrix can multiply
if(M.mu!=N.nu)
return ERROR;
//initilize Q
Q.nu=M.nu;
Q.mu=N.mu;
Q.tu=0;
for(arow=1;arow<=M.nu;++arow)
{
for(i=1;i<=MAXRC;i++)
ctemp[i]=0;
Q.rpos[arow]=Q.tu+1;
//计算M中的第arow行的最后一个非零元的范围
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].j;//对应相乘的列
if(brow<N.mu)
tm=N.rpos[brow+1];
else
tm=N.tu+1;
for(q=N.rpos[brow];q<tm;++q)//当前brow行
{
ccol=N.data[q].j;
ctemp[ccol]+=M.data[p].e * N.data[q].e;//have a bug
}
}
for(ccol=1;ccol<=Q.mu;++ccol)
{
if(ctemp[ccol])
{
if(++Q.tu>MAXSIZE)
return ERROR;
Q.data[Q.tu].i=arow;
Q.data[Q.tu].j=ccol;
Q.data[Q.tu].e=ctemp[ccol];
}
}
}
return OK;
}
上面的代码不知道错在哪里,望高手指点一下