矩阵的快速转置算法
数据压缩是提高传输、存储效率一种技术。教材第5章介绍了两种简单的压缩存储方法。本实验要求实现三元组顺序表表示下的矩阵快速转置算法。
输入:
稀疏矩阵的行数、列数、非零元个数(三个数都大于0)
以行为主序输入稀疏矩阵三元组表
输出:
辅助数组num[ ]
辅助数组cpot[ ]
以行为主序输出对应的转置矩阵三元组表
测试用例
in:
6 7 8
1 2 12
1 3 9
3 1 -3
3 6 14
4 3 24
5 2 18
6 1 15
6 4 -7
out:
num:2,2,2,1,0,1,0,
cpot:1,3,5,7,8,8,9,
1,3,-3
1,6,15
2,1,12
2,5,18
3,1,9
3,4,24
4,6,-7
6,3,14
#include
#include
typedef struct
{
int i, j;
int e;
}triple;
typedef struct
{
triple data[1000];
int mu,nu,tu;
}Matrix;
int num[1000],cpot[1000];
int main()
{
int col,t,p,q;
Matrix M,T;
scanf("%d%d%d",&M.mu,&M.nu,&M.tu);
for(int i=1;i<= M.tu;i++)
scanf("%d%d%d",&M.data[i].i,&M.data[i].j,&M.data[i].e);
T.mu=M.mu;
T.nu=M.nu;
T.tu=M.tu;
if(T.tu)
{
for(col=1;col<=M.nu;col++)
num[col] = 0;
for(t=1;t<= M.tu;t++)
num[M.data[t].j]++;
cpot[0]=1;
cpot[1]=1;
for(col=2;col<=M.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;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].e=M.data[p].e;
cpot[col]++;
}
}
printf("num:");
for(int i=1;i<=M.nu;i++)
printf("%d,",num[i]);
printf("\n");
printf("cpot:");
for(int i=0;i