Problem Description
数据压缩是提高传输、存储效率一种技术。教材第5章介绍了两种简单的压缩存储方法。
本实验要求实现三元组顺序表表示下的矩阵快速转置算法。
输入:
稀疏矩阵的行数、列数、非零元个数(三个数都大于0)
]以行为主序输入稀疏矩阵三元组表
输出:
辅助数组num[ ]
辅助数组cpot[ ]
以行为主序输出对应的转置矩阵三元组表
测试输入
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
测试输出
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
AcCode
//
// main.cpp
// 矩阵的快速转置算法
//
// Created by jetviper on 2017/3/26.
// Copyright © 2017年 jetviper. All rights reserved.
//
#include<stdio.h>
#define MAX 100
typedef struct {
int i, j, e;
}list;
typedef struct {
list data[MAX];
int mu, nu, tu;
}TS;
int main()
{
TS M,T;
int num[MAX], cpot[MAX];
int i, t, p, q, col;
scanf("%d%d%d", &M.mu, &M.nu, &M.tu);
for (i = 0; i < 100; i++)num[i] = 0;
for (i = 1; i <= M.tu; i++)scanf("%d%d%d", &M.data[i].i, &M.data[i].j, &M.data[i].e);
for (t = 1; t <= M.tu; ++t)++num[M.data[t].j];
cpot[1] = 1;
for (col = 2; col <= M.nu; col++)cpot[col] = cpot[col - 1] + num[col - 1];
printf("num:");
for (i = 1; i <= M.nu; i++)printf("%d,", num[i]);
printf("\ncpot:");
for (i = 1; i <= M.nu; i++)printf("%d,", cpot[i]);
printf("\n");
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]++;
}
for (i = 1; i <= M.tu; i++)printf("%d,%d,%d\n", T.data[i].i, T.data[i].j, T.data[i].e);
return 0;
}