用三元组实现稀疏矩阵的乘法!
#include<stdio.h>#include<stdlib.h>
#define MAXSIZE 12500
typedef struct
{
int i,j;
int e;
} Triple;
typedef struct
{
Triple data[MAXSIZE+1];
int mu,nu,tu;
} TSMatrix;
int CreateSMatrix2(TSMatrix &A,TSMatrix &B)//正确
{
int m,n,i,j,f,g,d,c,v,b;
i=1;j=1;
scanf("%d %d",&m,&n);
A.mu=m;
A.nu=n;
A.tu=0;
while(1)
{
scanf("%d %d %d",&f,&g,&d);
if(f==0&g==0&d==0)
{break;}
else
A.data[i].i=f;
A.data[i].j=g;
A.data[i].e=d;
A.tu++;
i++;
}
scanf("%d %d",&m,&n);
B.mu=m;
B.nu=n;
B.tu=0;
while(1)
{
scanf("%d %d %d",&c,&v,&b);
if(c==0&v==0&b==0)
{break;}
else
B.data[j].i=c;
B.data[j].j=v;
B.data[j].e=b;
B.tu++;
j++;
}
return 0;
}
int MultS(TSMatrix &A,TSMatrix &B,TSMatrix &C)
{ int k,p,crow,brow,q,ccol;
int num[MAXSIZE],pos[MAXSIZE],ctemp[MAXSIZE];
if (A.nu==B.mu)
{ for(k=1;k<=B.mu;k++)
num[k]=0;
for(k=1;k<=B.tu;k++)
num[B.data[k].i]++;
pos[1]=1;
for(k=2;k<=B.tu;k++)
pos[k]=pos[k-1]+num[k-1];
pos[1+B.tu]=pos[B.tu]+1;
C.mu=A.mu; C.nu=B.nu; C.tu=0; p=1;
while(p<=A.tu)
{crow=A.data[p].i;
for(k=1;k<=C.nu;k++)
ctemp[k]=0;
while (p<=A.tu&&A.data[p].i==crow)
{
brow=A.data[p].j;
for(q=pos[brow];q<=pos[brow+1]-1;q++)
{ ccol=B.data[q].j;
ctemp[ccol]=ctemp[ccol]+A.data[p].e*B.data[q].e;
}
p=p+1;
}
for(ccol=1;ccol<=B.nu;ccol++)
if(ctemp[ccol]!=0)
{ C.tu=C.tu+1;
C.data[C.tu].i=crow;
C.data[C.tu].j=ccol;
C.data[C.tu].e=ctemp[ccol];
}
}
}return 0;
}
int main()
{
TSMatrix A,B,C;
int i;
CreateSMatrix2(A,B);
MultS(A,B,C);
for(i=1;1;i++)
{
printf("%d %d %d\n",C.data[i].i,C.data[i].j,C.data[i].e);
if(i>=C.tu)
break;
}
return 0;
}
这是我的代码,我晕了,明明给的测试数据运行下来是对的可是提交后怎么都显示答案错误!调试了一天了也没发现啥问题。救救我!