Tuesday, May 19, 2009

Sparse Matrix

/*
Title : Sparse Matrices

Problem Definition: To represent sparse matrix using arrays and perform
following operations:
1.Addition of 2 sparse matrices
2.Simple transpose
3.Fast transpose of a sparse matrix
*/


#include
#include
#include

void sparse(int [10][10],int [10][10],int,int,int);
void accept(int [10][10],int,int);
void display(int [10][10],int,int);
int sparsecount(int [10][10],int,int);
void addsparse(int [10][10],int [10][10],int [10][10]);
void simptrans(int [10][10],int);
void fasttrans(int [10][10]);

void main()
{
int a[10][10]={0},b[10][10]={0};
int m,n,p,q;
int k,t,ch;
int s[10][10]={0},r[10][10]={0},pd[10][10]={0};
clrscr();

do
{
printf("\n Menu: ");
printf("\n 0.Enter the matrix");
printf("\n 1.Addition");
printf("\n 2.Simple transpose");
printf("\n 3.Fast transpose");
printf("\n 4.Exit");
printf("\n Enter your choice:");
scanf(" %d",&ch);
switch(ch)
{
case 0:
printf("\n Enter the number of rows and columns of a:");
scanf(" %d %d",&m,&n);
printf("\n Enter the number of rows and columns of b:");
scanf(" %d %d",&p,&q);
accept(a,m,n);
accept(b,p,q);
k=sparsecount(a,m,n);
printf("\n The count is %d",k);
t=sparsecount(b,p,q);
printf("\n The count is %d",t);
sparse(s,a,m,n,k);
sparse(r,b,p,q,t);
break;

case 1:
addsparse(s,r,pd);
break;

case 2:
simptrans(s,n);
simptrans(r,q);
break;

case 3:
fasttrans(s);
fasttrans(r);
break;

case 4:
exit(0);
}
}
while(ch!=4);
getch();
}


void accept(int x[10][10],int m,int n)
{
int i,j;
printf("\nEnter the elements : ");
for(i=0;i for(j=0;j {
scanf(" %d",&x[i][j]);
}
}


void display(int x[10][10],int m,int n)
{
int i,j;
printf("\nThe matrix : ");
printf("\n");
for(i=0;i {
for(j=0;j {
printf("\t%d",x[i][j]);
}
printf("\n");
}
}


int sparsecount(int x[10][10],int m,int n)
{
int i,j,count=0;
for(i=0;i for(j=0;j if(x[i][j]!=0)
count++;
return(count);
}


void sparse(int q[10][10],int x[10][10],int m,int n,int z)
{
int i,j,k=1;
q[0][0]=m;
q[0][1]=n;
for(i=0;i for(j=0;j if(x[i][j]!=0)
{
q[k][0]=i;
q[k][1]=j;
q[k][2]=x[i][j];
k++;
}
q[0][2]=z;
display(q,k,3);
}

void addsparse(int a[10][10],int b[10][10],int c[10][10])
{
int ca,cb,cc,sum,ta,tb;

ta=a[0][2];
tb=b[0][2];
ca=cb=cc=1;

if((a[0][0] != b[0][0]) (a[0][1] != b[0][1]))
{
printf("\nAddition not possible");
return ;
}
c[0][0]=a[0][0];
c[0][1]=a[0][1];
while(ca<=ta && cb<=tb)
{
if(a[ca][0] {
c[cc][0]=a[ca][0];
c[cc][1]=a[ca][1];
c[cc][2]=a[ca][2];
ca++;
cc++;
}
else if(a[ca][0]==b[cb][0])
{
if(a[ca][1]==b[cb][1])
{
sum=a[ca][2]+b[cb][2];
if(sum!=0)
{
c[cc][2]=sum;
c[cc][1]=a[ca][1];
c[cc][0]=a[ca][0];
cc++;
}
ca++;
cb++;
}
else if(a[ca][1] {
c[cc][0]=a[ca][0];
c[cc][1]=a[ca][1];
c[cc][2]=a[ca][2];
ca++;
cc++;
}
else
{
c[cc][0]=b[cb][0];
c[cc][1]=b[cb][1];
c[cc][2]=b[cb][2];
cb++;
cc++;
}
}
else
{
c[cc][0]=b[cb][0];
c[cc][1]=b[cb][1];
c[cc][2]=b[cb][2];
cb++;
cc++;
}
}
while(ca<=ta)
{
c[cc][0]=a[ca][0];
c[cc][1]=a[ca][1];
c[cc][2]=a[ca][2];
ca++;
cc++;
}
while(cb {
c[cc][0]=b[cb][0];
c[cc][1]=b[cb][1];
c[cc][2]=b[cb][2];
cb++;
cc++;
}
c[0][2]=cc-1;
display(c,cc,3);
}


void simptrans(int x[10][10],int n)
{
int i,j,k=0;
int y[10][10]={0};
for(i=0;i<=n;i++)
{
for(j=0;j<=x[0][2];j++)
{
if(x[j][1]==i)
{
k++;
y[k][0]=x[j][1];
y[k][1]=x[j][0];
y[k][2]=x[j][2];
}
}
}
y[0][0]=x[0][1];
y[0][1]=x[0][0];
y[0][2]=x[0][2];
display(y,k,3);
}


void fasttrans(int x[10][10])
{
int i,j;
int s[10]={0},p[10]={0},b[10][10]={0};
for(i=0;i s[i]=0;
for(i=1;i<=x[0][2];i++)
s[x[i][1]]=s[x[i][1]]+1;
p[0]=1;
for(i=1;i p[i]=p[i-1]+s[i-1];
for(i=1;i<=x[0][2];i++)
{
j=p[x[i][1]];
b[j][0]=x[i][1];
b[j][1]=x[i][0];
b[j][2]=x[i][2];
p[x[i][1]]=j+1;
}
b[0][0]=x[0][1];
b[0][1]=x[0][0];
b[0][2]=x[0][2];
display(b,i,3);
}

No comments:

Post a Comment