#include
#define OK 1
#define MAX 10
typedef struct {
int i,j;
int v;
}TriTupleNode;
typedef struct {
TriTupleNode data[MAX+1];
int m,n,t;
}TSMatrix;
void InitTriTupleNode(TSMatrix *a)
{
int i,j,k,val,maxrow,maxcol;
maxrow=0;
maxcol=0;
k=1;
while
(i!=-1&&j!=-1) {
printf("input row col val:");
scanf("%d %d
%d",&i,&j,&val);
a->data[k].i=i;
a->data[k].j=j;
a->data[k].v=val;
if (maxrow
maxrow=i;
}
if (maxcol
maxcol=j;
}
k++;
}
a->m=maxrow;
a->n=maxcol;
a->t=k;
}
void ShowMatrix(TSMatrix *a)
{
int p,q;
int t=1;
for(p=1;p<=a->m;p++)
{
for(q=1;q<=a->n;q++)
if
(a->data[t].i==p&&a->data[t].j==q) {
printf("%d ",a->data[t].v);
t++;
}
else
printf("0 ");
printf("\n");
}
}
void TransposeMatrix(TSMatrix M,TSMatrix
&T)
{
T.m=M.n;
T.n=M.m;
T.t=M.t;
int* cpot=new int[M.n+1];
int* num=new int[M.n+1];
int p,q;
int col;
if (T.t) {
for(col=1;col<=M.n;++col)
num[col]=0;
for(int t=1;t<=M.t;t++)
++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.n;++col)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.t;++p)
{
col=M.data[p].j;
q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].v=M.data[p].v;
++cpot[col];
}
}
delete [] cpot;
delete [] num;
}
int main()
{
TSMatrix a,b;
TSMatrix *pa=&a,*pb=&b;
InitTriTupleNode(pa);
printf("稀疏矩阵转置前:\n");
ShowMatrix(pa);
printf("稀疏矩阵转置后:\n");
TransposeMatrix(a,b);
ShowMatrix(pb);
return 0;
}