[NOJ]数据结构实验2.1 稀疏矩阵转置
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int row,col;
int e;
}Triple;
typedef struct
{
Triple *data;
int m,n,len;
}TSMatrix;
void init(TSMatrix* M) //读入数据
{
int m,n,i,j,e;
Triple *p;
M->data=(Triple*)malloc(sizeof(Triple)*1200);
p=M->data;
M->len=0;
scanf("%d %d",&M->m,&M->n);
while(1)
{
scanf("%d %d %d",&i,&j,&e);
if(i==0&&j==0&e==0) break;
M->data[M->len].row=i;
M->data[M->len].col=j;
M->data[M->len].e=e;
M->len++;
}
}
void trans(TSMatrix *A,TSMatrix *B) //矩阵转置
{
B->data=(Triple*)malloc(sizeof(Triple)*A->len);
B->len=A->len;
int i,j,q;
int *col,*pos;
col=(int*)malloc(sizeof(int)*(A->n+1));
pos=(int*)malloc(sizeof(int)*(A->n+1));
for(i=0;i<A->n;i++) col[i]=0;
for(i=0;i<A->len;i++) col[A->data[i].col]++;
pos[0]=0;
for(i=1;i<A->n;i++) pos[i]=pos[i-1]+col[i-1];
for(i=0;i<A->len;i++)
{
j=A->data[i].col;q=pos[j];
B->data[q].row=A->data[i].col;
B->data[q].col=A->data[i].row;
B->data[q].e=A->data[i].e;
pos[j]++;
}
}
int main()
{
TSMatrix *A,*B;
A=(TSMatrix*)malloc(sizeof(TSMatrix));
B=(TSMatrix*)malloc(sizeof(TSMatrix));
init(A);
trans(A,B);
int i;
for(i=0;i<B->len;i++)
{
printf("%d %d %d\n",B->data[i].row,B->data[i].col,B->data[i].e);
}
return 0;
}