#define MAXSIZE 1250
typedef struct{
int i;
int j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
int TSMatrix_Add(TSMatrix M1,TSMatrix M2,TSMatrix *M){
int pa,pb,pc;
int ce;
int x;
M->mu=M1.mu;
M->nu=M1.nu;
M->tu=M1.tu;
pa=1;
pb=1;
pc=1;
for(x=1;x<=M1.mu;x++)
{
while(M1.data[pa].i<x)pa++;
while(M1.data[pb].i<x)pb++;
while(M1.data[pa].i==x&&M2.data[pb].i==x)
{
if(M1.data[pa].j==M2.data[pb].j)
{
ce=M1.data[pa].e+M2.data[pb].e;
if(ce)
{
M->data[pc].i=x;
M->data[pc].j=M1.data[pa].j;
M->data[pc].e=ce;
pa++;
pb++;
pc++;
}
else if(M1.data[pa].j>M2.data[pb].j)
{
M->data[pc].i=x;
M->data[pc].j=M2.data[pb].j;
M->data[pc].e=M2.data[pb].e;
pb++;pc++;
}
else{
M->data[pc].i=x;
M->data[pc].j=M1.data[pa].j;
M->data[pc].e=M1.data[pa].e;
pa++;pc++ ;
}
}
while(M1.data[pa].i==x)
{
M->data[pc].i=x;
M->data[pc].j=M1.data[pa].j;
M->data[pc].e=M1.data[pa].e;
pa++;pc++;
}
while(M2.data[pb].i==x)
{
M->data[pc].i=x;
M->data[pc].j=M2.data[pb].j;
M->data[pc].e=M2.data[pb].e;
pb++;pc++;
}
}
M->tu=pc;
}
}
void main(){
int i,j,k,l;
TSMatrix M1,M2;
scanf("%d%d%d",&M1.mu,&M1.nu,&M1.tu);
for(k=1;k<=M1.tu;++k){
scanf("%d",&M1.data[k].i);
scanf("%d",&M1.data[k].j);
scanf("%d",&M1.data[k].e);
}
scanf("%d%d%d",&M2.mu,&M2.nu,&M2.tu);
for(k=1;k<=M2.tu;k++){
scanf("%d",&M2.data[k].i);
scanf("%d",&M2.data[k].j);
scanf("%d",&M2.data[k].e);
}
if((M1.mu!=M2.mu)||(M1.nu!=M2.nu))
{printf("Can't add two matrix");
exit(0);}
TSMatrix_Add( M1,M2,*M);
for(k=1;k<=M.tu;k++)
printf("%d%d%d",M->data[k].i,M->data[k].j,M->data[k].e);
}
用winTc编译后有错误,哪位高手帮忙找下.