三元组(C++ 实现矩阵快速转置)

三元组稀疏矩阵是一种高效存储稀疏矩阵的方法。它通过记录矩阵中非零元素的行、列和值来表示一个稀疏矩阵。我们在三元组里存储的是每个元素的行、列以及值。

题目:

任意输入一个稀疏矩阵M,用三元组顺序表压缩存储该稀疏矩阵M,然后求其转置矩阵T,并输出转置矩阵T。

思路:

1、这里运用了快速转置,降低时间复杂度

2、快速转置的核心是确定转置后矩阵,每行的第一个非零元在三元表中的序号

3、详细在代码注释中

代码:

cpp 复制代码
#include<iostream>
using namespace std;
typedef struct node
{
	int i, j, e;
}Triple;
typedef struct node1
{
	node data[1000];
	int mu, nu, tu=0;//矩阵行数、列数、非零元个数
}TSMatrix;
void Transpose(TSMatrix m, TSMatrix& t)
{
	int num[100]={0}, head[100];
	t.mu = m.nu, t.nu = m.mu, t.tu = m.tu;
	if (t.tu)//非零元不为0个,则做下列操作
	{
		for (int i = 1; i <= t.mu; i++)//逆置矩阵的列变行,初始每行中的非零元个数为0
			num[i] = 0;
		for (int i = 1; i <= t.tu; i++)//遍历非零元
			num[m.data[i].j]++;//列变行,m中每列的非零元个数就是t中每列非零元的个数
		head[1] = 1;
		for (int i = 2; i <= t.mu; i++)//遍历t的行数
			head[i] = head[i - 1] + num[i-1];//每行的第一个非零元在三元表中的序号
		for (int i = 1; i <= t.tu; i++)//遍历非零元
		{
			int col = m.data[i].j;//取非零元的列数
			int l = head[col];//该列要存储的位置
			t.data[l].i = m.data[i].j, t.data[l].j = m.data[i].i;//行转列,列转行
			t.data[l].e = m.data[i].e;
			head[col]++;//该列元素下次存储往下一位
		}

	}
}
int main()
{
	TSMatrix m,t;
	int ju[51][51];
	cout << "输入行数,列数:" << endl;
	cin >>m.mu >> m.nu;
	for (int i = 1; i <= m.mu; i++)//输入初始矩阵,建立三元组
		for (int j = 1; j <= m.nu; j++)
		{
			cin >> ju[i][j];
			if (ju[i][j] != 0)
			{
				m.tu++;
				m.data[m.tu].e = ju[i][j];
				m.data[m.tu].i = i, m.data[m.tu].j = j;
			}
		}
	Transpose(m, t);
	//for (int i = 1; i <= m.tu; i++)
		//cout << m.data[i].e << " " << m.data[i].i << " " << m.data[i].j << endl;
	//cout << endl;
	//for (int i = 1; i <= t.tu; i++)
		//cout << t.data[i].e << " " << t.data[i].i << " " << t.data[i].j << endl;
	cout << "逆置后矩阵:" << endl;
	int k = 1;
	for (int i = 1; i <= t.mu; i++)
	{
		for (int j = 1; j <= t.nu; j++)
		{
			if (t.data[k].i == i && t.data[k].j == j)
				cout << t.data[k++].e << " ";
			else
				cout << "0 ";
		}
		cout << endl;
	}

}
相关推荐
闻缺陷则喜何志丹7 分钟前
【C++动态规划】1105. 填充书架|2104
c++·算法·动态规划·力扣·高度·最小·书架
CES_Asia8 分钟前
国资助力科技创新,闪耀CES Asia 2025
人工智能·科技·智能手机·智能音箱·智能电视
eric-sjq30 分钟前
基于xiaothink对Wanyv-50M模型进行c-eval评估
人工智能·python·语言模型·自然语言处理·github
是十一月末40 分钟前
机器学习之KNN算法预测数据和数据可视化
人工智能·python·算法·机器学习·信息可视化
工业互联网专业44 分钟前
基于OpenCV和Python的人脸识别系统_django
人工智能·python·opencv·django·毕业设计·源码·课程设计
初学者丶一起加油1 小时前
C语言基础:指针(数组指针与指针数组)
linux·c语言·开发语言·数据结构·c++·算法·visual studio
ai产品老杨1 小时前
报警推送消息升级的名厨亮灶开源了。
vue.js·人工智能·安全·开源·音视频
智源研究院官方账号1 小时前
智源研究院与安谋科技达成战略合作,共建开源AI“芯”生态
人工智能·开源
积兆科技1 小时前
从汽车企业案例看仓网规划的关键步骤(视频版)
人工智能·算法·汽车·制造
Robot2511 小时前
「地平线」副总裁余轶南与「理想汽车」智驾产品总监赵哲伦联手创业,入局具身智能赛道!
大数据·人工智能·机器人·汽车