主题:我是初学者,希望好心人帮帮忙!谢谢了!
[em8]稀疏矩阵加法的程序,我自己写的,大虾门不要见笑~!呵呵~
用的是三元组,编译成功了,可是没有运行结果,希望大家帮帮我!谢谢!
代码:::
#define MAXSIZE 12500
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatirx;
main()
{int p,q,n,k;
TSMatirx M,N,L;
printf("请输入矩阵M的行数,列数和非零元的个数:");
scanf("%d%d%d",&M.mu,&M.nu,&M.tu);
printf("请输入矩阵N的行数,列数和非零元的个数:");
scanf("%d%d%d",&N.mu,&N.nu,&N.tu);
if(M.mu!=N.mu||M.nu!=N.nu)
{ printf("输入错误");
exit(0);}
for(p=1;p<=M.tu;p++)
{ printf("请输入M的第%d个非零元:",p);
scanf("%d%d%d",&M.data[p].i,&M.data[p].j,&M.data[p].e);
if(p>=2){if(M.data[p].i<M.data[p-1].i)
{ printf("输入错误");
exit(0);}
else
if(M.data[p].i==M.data[p-1].i&&M.data[p].j<M.data[p-1].j)
{ printf("输入错误");
exit(0);}
}
}
for(q=1;q<=N.tu;q++)
{ printf("请输入N的第%d个非零元:",q);
scanf("%d%d%d",&N.data[q].i,&N.data[q].j,&N.data[q].e);
if(q>=2){if(N.data[q].i<N.data[q-1].i)
{ printf("输入错误");
exit(0);}
else
if(N.data[q].i==N.data[q-1].i&&N.data[q].j<N.data[q-1].j)
{ printf("输入错误");
exit(0);}
}
}
p=1,q=1,n=1;
while (p<=M.tu&&q<=N.tu)
{if(M.data[p].i<N.data[q].i)
{L.data[n]=M.data[p];
n++;p++;continue;}
if(M.data[p].i>N.data[q].i)
{L.data[n]=N.data[q];
n++;q++;continue;}
else if(M.data[p].j<N.data[q].j)
{L.data[n]=M.data[p];
n++;p++;continue;}
if(M.data[p].j>N.data[q].j)
{L.data[n]=N.data[q];
n++;q++;continue;}
else{L.data[n].i=M.data[p].i;
L.data[n].j=M.data[p].j;
L.data[n].e=M.data[p].e+N.data[q].e;
}
}
if(p!=M.tu)
{ while(p<=M.tu)
{L.data[n]=M.data[p];
n++;p++;}
}
if(q!=N.tu)
{ while(q<=N.tu)
{L.data[n]=N.data[q];
n++;q++;}
}
printf("L:\n");
for(p=1,k=1;p<=M.mu;p++)
for(q=1;q<=M.nu;q++)
{ if(L.data[k].i==p&&L.data[k].j==q)
{printf("%d",L.data[k].e);
k++;}
else printf("%s",'0');
if(q==M.nu) printf("\n");
}
}
用的是三元组,编译成功了,可是没有运行结果,希望大家帮帮我!谢谢!
代码:::
#define MAXSIZE 12500
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatirx;
main()
{int p,q,n,k;
TSMatirx M,N,L;
printf("请输入矩阵M的行数,列数和非零元的个数:");
scanf("%d%d%d",&M.mu,&M.nu,&M.tu);
printf("请输入矩阵N的行数,列数和非零元的个数:");
scanf("%d%d%d",&N.mu,&N.nu,&N.tu);
if(M.mu!=N.mu||M.nu!=N.nu)
{ printf("输入错误");
exit(0);}
for(p=1;p<=M.tu;p++)
{ printf("请输入M的第%d个非零元:",p);
scanf("%d%d%d",&M.data[p].i,&M.data[p].j,&M.data[p].e);
if(p>=2){if(M.data[p].i<M.data[p-1].i)
{ printf("输入错误");
exit(0);}
else
if(M.data[p].i==M.data[p-1].i&&M.data[p].j<M.data[p-1].j)
{ printf("输入错误");
exit(0);}
}
}
for(q=1;q<=N.tu;q++)
{ printf("请输入N的第%d个非零元:",q);
scanf("%d%d%d",&N.data[q].i,&N.data[q].j,&N.data[q].e);
if(q>=2){if(N.data[q].i<N.data[q-1].i)
{ printf("输入错误");
exit(0);}
else
if(N.data[q].i==N.data[q-1].i&&N.data[q].j<N.data[q-1].j)
{ printf("输入错误");
exit(0);}
}
}
p=1,q=1,n=1;
while (p<=M.tu&&q<=N.tu)
{if(M.data[p].i<N.data[q].i)
{L.data[n]=M.data[p];
n++;p++;continue;}
if(M.data[p].i>N.data[q].i)
{L.data[n]=N.data[q];
n++;q++;continue;}
else if(M.data[p].j<N.data[q].j)
{L.data[n]=M.data[p];
n++;p++;continue;}
if(M.data[p].j>N.data[q].j)
{L.data[n]=N.data[q];
n++;q++;continue;}
else{L.data[n].i=M.data[p].i;
L.data[n].j=M.data[p].j;
L.data[n].e=M.data[p].e+N.data[q].e;
}
}
if(p!=M.tu)
{ while(p<=M.tu)
{L.data[n]=M.data[p];
n++;p++;}
}
if(q!=N.tu)
{ while(q<=N.tu)
{L.data[n]=N.data[q];
n++;q++;}
}
printf("L:\n");
for(p=1,k=1;p<=M.mu;p++)
for(q=1;q<=M.nu;q++)
{ if(L.data[k].i==p&&L.data[k].j==q)
{printf("%d",L.data[k].e);
k++;}
else printf("%s",'0');
if(q==M.nu) printf("\n");
}
}