#include<stdio.h>
#include<conio.h>
struct sparse
{
int r,c,v;
}s1[10],s2[10],s3[10];
void display(struct sparse s[]);
void checksparse(int r,int c,int m[][10])
{
int
i,j,cnt=0,cnt1=0;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if((m[i][j])==0)
{
cnt++;
}
else
{
cnt1++;
}
}
}
if(cnt1>cnt)
{
printf("Addition
not possible matrix is not sparse\n");
getch();
exit();
}
}
void makematrix(int r,int c,int m[10][10])
{
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("Enter
value for m[%d][%d]:",i,j);
scanf("%d",&m[i][j]);
}
}
}
void makesparse(int r,int c,int m[][10],struct sparse
s[10])
{ int
i,j,k=1;
s[0].r=r;
s[0].c=c;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
if(m[i][j]!=0)
{
s[k].r=i;
s[k].c=j;
s[k].v=m[i][j];
k++;
}
}
k--;
s[0].v=k;
}
void addsparse(struct sparse s1[],struct sparse s2[])
{
int i=1,j=1,k=1;
s3[0].r=s1[0].r>s2[0].r?s1[0].r:s2[0].r;
s3[0].c=s1[0].c>s2[0].c?s1[0].c:s2[0].c;
while((i<=s1[0].v) && (j<=s2[0].v))
{
if(s1[i].r==s2[j].r)
{
if(s1[i].c==s2[j].c)
{
s3[k].r=s1[i].r;
s3[k].c=s1[i].c;
s3[k].v=s1[i].v+s2[j].v;
i++;j++;k++;
}
else
if(s1[i].c<s2[j].c)
{
s3[k].r=s1[i].r;
s3[k].c=s1[i].c;
s3[k].v=s1[i].v;
i++;
k++;
}
else
{
s3[k].r=s2[j].r;
s3[k].c=s2[j].c;
s3[k].v=s2[j].v;
j++;
k++;
}
}
else
if(s1[i].r<s2[j].r)
{
s3[k].r=s1[i].r;
s3[k].c=s1[i].c;
s3[k].v=s1[i].v;
i++;k++;
}
else
{
s3[k].r=s2[j].r;
s3[k].c=s2[j].c;
s3[k].v=s2[j].v;
j++;k++;
}
}
while(i<=s1[0].v)
{
s3[k].r=s1[i].r;
s3[k].c=s1[i].c;
s3[k].v=s1[i].v;
i++;k++;
}
while(j<=s2[0].v)
{
s3[k].r=s1[j].r;
s3[k].c=s1[j].c;
s3[k].v=s1[j].v;
j++;k++;
}
k--;
s3[0].v=k;
printf("Addition
of 2 sparse matricies is ");
printf("\n");
display(s3);
}
void display(struct sparse s[])
{
int i;
printf("ROW\tCOLUMN\tVALUE\n");
for(i=0;i<=s[0].v;i++)
{
printf("%d\t%d\t%d\n",s[i].r,s[i].c,s[i].v);
}
}
void main()
{
int
r1,r2,c1,c2,m1[10][10],m2[10][10];
clrscr();
printf("Enter
number of rows and columns in first Matrix:");
scanf("%d%d",&r1,&c1);
makematrix(r1,c1,m1);
checksparse(r1,c1,m1);
printf("Enter
number of rows and columns in second Matrix:");
scanf("%d%d",&r2,&c2);
makematrix(r2,c2,m2);
checksparse(r2,c2,m2);
makesparse(r1,c1,m1,s1);
makesparse(r2,c2,m2,s2);
display(s1);
display(s2);
addsparse(s1,s2);
getch();
}