/*PROGRAM FOR TRANSPOSE OF A SPARSE MATRIX*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
void main()
{
 int *r1,*c1,*t1,*r2,*c2,*t2;
 int i,j,*s,*t;
 clrscr();
 printf ("\aENTER NO. OF NON ZERO ELEMENTS OF MATRIX\t");
 scanf ("%d",&i);
 r1=(int*)malloc((i+1)*sizeof(int));
 c1=(int*)malloc((i+1)*sizeof(int));
 t1=(int*)malloc((i+1)*sizeof(int));
 printf ("ENTER NO. OF ROWS OF MATRIX \t");
 scanf ("%d",(r1+0));
 printf ("ENTER NO. OF COLOUMNS OF MATRIX\t");
 scanf ("%d",(c1+0));
 *(t1+0)=i;
 for (i=1;i<=*t1;i++)
  {
    printf ("ROW NO.\t|^|^|\tCOLOUMN NO.|^|^|\tVALUE\t|^|^|\n");
    scanf ("%d%d%d",r1+i,c1+i,t1+i);
  }
 r2=(int*)malloc((i+1)*sizeof(int));
 c2=(int*)malloc((i+1)*sizeof(int));
 t2=(int*)malloc((i+1)*sizeof(int));
 *r2=*c1;
 *c2=*r1;
 *t2=*t1;
 s=(int*)malloc((*c2)*sizeof(int));
 t=(int*)malloc((*t2)*sizeof(int));
 *s=*c1;
 *t=*t1;
 for (i=1;i<=*c1;i++)
  {
    *(s+i)=0;
  }
 for (i=1;i<=*t1;i++)
  {
    *(s+*(c1+i))=*(s+*(c1+i))+1;
  }
 *(t+1)=1;
 for (i=2;i<=*c1;i++)
  {
    *(t+i)=*(t+i-1)+*(s+i-1);
  }
 for (i=1;i<=*t1;i++)
  {
    j=*(t+*(c1+i));
    *(r2+j)=*(c1+i);
    *(c2+j)=*(r1+i);
    *(t2+j)=*(t1+i);
    *(t+*(c1+i))=j+1;
  }
 printf("TOTAL NO. OF ROWS IN TRANPOSED MATRIX:%d\n",*r2);
 printf("TOTAL NO. OF COLOUMNS IN TRANPOSED MATRIX:%d\n",*c2);
 printf("TOTAL NO. OF NON ZERO TERMS IN TRANPOSED MATRIX:%d\n",*t2);
 for (i=1;i<=*t2;i++)
  {
    printf("ROW NO. OF %d NON ZERO ELEMENT: %d\nCOLOUMN NO. OF %d NON ZERO ELEMENT: %d\n%d NON ZERO ELEMENT IS: %d\n",i,*(r2+i),i,*(c2+i),i,*(t2+i));
  }
 getche();
 printf("THANKS FOR VISITING NIKHIL`S PROGRAM.HAVE A GOOD DAY!");
 getche();
}







