压缩矩阵的转置


#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值