#include<iostream>
#include<cstdlib>
#include<cstdio>
#define MAXSIZE 12500
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu; //存储矩阵的行数、列数、非零元个数
}TSMatrix;
void input(TSMatrix &sm){
for(int i=1;i<=sm.nu*sm.mu;i++) //【1】如果普通的转置算法写成sm.mu*sm.nu,压缩矩阵则要把判定条件改为:i<=sm.tu
scanf("%d%d%d",&sm.data[i].i,&sm.data[i].j,&sm.data[i].e); //【2】注意要按照自己定义的结构体格式进行输入
}
void print(TSMatrix sm){
int index=1;
for(int i=1;i<=sm.mu;i++){
for(int j=1;j<=sm.nu;j++){
printf("%d\t",sm.data[index].e);
index++;
}
printf("\n");
}
}
//稀疏矩阵的转置操作
//按照矩阵M的列序进行转置
int TransposeSMatrix(TSMatrix M,TSMatrix &T){
T.nu=M.mu;T.mu=M.nu;T.tu=M.tu;
if(T.tu){
int q=1;
for(int col=1;col<=M.nu;col++)
for(int p=1;p<=M.tu;p++)
if(M.data[p].j==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;
++q;
}
}
return 1;
}
int main(){
freopen("input1.txt","r",stdin);
freopen("input2.txt","r",stdin);
// printf("请输入矩阵的行数、列数、非零元素的个数:\n");
printf("原矩阵为:\n");
TSMatrix sm,ms;
scanf("%d%d%d",&sm.mu,&sm.nu,&sm.tu);
input(sm);
print(sm);
TransposeSMatrix(sm,ms);
printf("转置完:\n");
print(ms);
return 0;
}
12-24
1027
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-21
511
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-05
995
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)