三元组(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;
	}

}
相关推荐
如若1233 分钟前
TRACER 论文解读与复现:面向 ICU 长时程患者监测的多模态 Harness 架构、时序证据建模与工具增强推理
人工智能·深度学习·计算机视觉
深蓝AI2 小时前
无头浏览器不必从 Chrome 改:Lightpanda 用 Zig 从零造,100 个页面只占 123MB 内存
人工智能·程序员
奈落244 小时前
AI辅助的另一面:从2026年国际AI安全报告的“故障”清单到国内专家的可靠性短板,自主行动的Agent为什么更难及时干预
人工智能·安全·agent·本地部署·ai 办公
火山引擎开发者社区6 小时前
eMudhra 证书失陷:容器用户最容易忽略的镜像信任链漏洞
人工智能
LabVIEW开发7 小时前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
飞猫的边缘AI8 小时前
英特尔量子生意
人工智能·量子计算·边缘ai
深蓝AI8 小时前
桌面 Agent 缺的不是视觉:Vercel 开源 agent-desktop,用无障碍树 ref 替代截图坐标
人工智能·程序员
镜子AI8 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
向哆哆8 小时前
羊行为目标检测数据集:4类别、2,000张图像 | 目标检测
人工智能·yolo·目标检测·目标跟踪
如若1239 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python