数据结构上机实验解题报告

本文介绍了如何计算两个稀疏矩阵的差值,通过存储和排序三元组实现,并提供了C++代码示例。同时,涉及了二叉树最短路径长度的计算、文字编辑操作的处理以及寻找组装产品最短时间的关键方案数问题,展示了多种算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 7.1 稀疏矩阵之差
  • 7.2 二叉树最短路径长度
  • 7.3 文字编辑
  • 7.4 方案计数

7.1 稀疏矩阵之差

7-1 稀疏矩阵之差

分数 100

作者 谷方明

单位 吉林大学

矩阵A和B都是稀疏矩阵。请计算矩阵的差A-B.如果A、B不能计算差值,输出"Illegal!"

输入格式:

矩阵的输入采用三元组表示,先A后B。对每个矩阵:

第1行,3个整数N、M、t,用空格分隔,分别表示矩阵的行数、列数和非0数据项数,10≤N、M≤50000,t≤min(N,M).

第2至t+1行,每行3个整数r、c、v,用空格分隔,表示矩阵r行c列的位置是非0数据项v, v在32位有符号整型范围内。三元组默认按行列排序。

输出格式:

矩阵A-B,采用三元组表示,默认按行列排序,非零项也在32位有符号整型范围内。

输入样例:

在这里给出一组输入。例如:

10 10 3
2 2 2
5 5 5
10 10 20
10 10 2
2 2 1
6 6 6

输出样例:

在这里给出相应的输出。例如:

10 10 4
2 2 1
5 5 5
6 6 -6
10 10 20

代码长度限制

16 KB

时间限制

100 ms

内存限制

10 MB

思路:

1.将稀疏矩阵按行列顺序存储

先存入然后使用sort排序保证行列序

2.将两个稀疏矩阵相减

因为行列小的要先存入,我这里认为如果一个矩阵已经合并结束,也不退出循环,而是将它代表结点的值赋值0,行列复制为无穷

在计算时若出现相减等于0的val值应避免录入

余下思路在注释体现

参考代码:

#include <iostream>
#include <vector>
#include <algorithm>
typedef struct {
	int row;//行
	int col;//列
	int val;
}Matrix;
bool com(Matrix a, Matrix b) {
	if (a.row != b.row) { return a.row < b.row; }
	else if (a.col != b.col) { return a.col < b.col; }
}
using namespace std;
vector<Matrix> ans;
int min(int m, int n) {
	if (m > n) {
		return n;
	}
	else {
		return m;
	}
}
bool Isalessb(Matrix A, Matrix B) {//a是否小于b?
	if (A.row != B.row) { return A.row < B.row; }
	if (A.col != B.col) { return A.col < B.col; }
	return false;
}
bool Isaequalb(Matrix A, Matrix B) {//a是否等于b?
	if (A.row == B.row && A.col == B.col) {
		return true;
	}
	return false;
}
Matrix* newjuzhen(int M, int N, int t) {
	int row = 0, col = 0, val = 0;
	int countA = 0;
	Matrix* A = new Matrix[min(M, N)];
	f
第一次实验: 题目1 单链表相关算法实验验证。 [实验目的] 验证单链表及其上的基本操作。 [实验内容及要求] 1、 定义单链表类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建单链表; 2)插入操作:分别在当前结点后、表头、表尾插入值为x的结点; 3)删除操作:分别删除表头结点、表尾结点当前结点的后继结点; 4)存取操作:分别存取当前结点的值单链表中第k个结点的值; 5)查找操作:查找值为x的元素在单链表中的位置(下标)。 题目2 分别给出堆栈、队列相关算法实验验证。 [实验目的] 验证堆栈、队列及其上的基本操作。 [实验内容及要求](以队列为例) 1、 定义队列类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建队列; 2)插入操作:向队尾插入值为x的元素; 3)删除操作:删除队首元素; 4)存取操作:读取队首元素。 第二次实验 题目1 二叉树相关算法实验验证。 [实验目的] 验证二叉树的链接存储结构及其上的基本操作。 [实验内容及要求] 1、 定义链接存储的二叉树类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建一棵二叉树,并对其初始化; 2)先根、中根、后根遍历二叉树(递归算法); 3)在二叉树中搜索给定结点的父结点; 4)搜索二叉树中符合数据域条件的结点; 5)从二叉树中删除给定结点及其左右子树。 题目2 树森林的遍历算法实验验证。 [实验目的] 验证树森林的遍历算法。 [实验内容及要求] 1、 定义左儿子—右兄弟链接存储的树类森林类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建树森林; 2)树森林的先根遍历的递归迭代算法; 3)树森林的后根遍历的递归迭代算法; 4)树森林的层次遍历算法。 题目3 二叉查找树的验证实验。 [实验目的] 验证二叉查找树及其相关操作。 [实验内容及要求] 1、 定义二叉查找树的类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)实现二叉查找树结构; 2) 实现二叉查找树的查找、插入删除等算法; 第三次实验 题目1 邻接表存储的图相关算法实验验证。 [实验目的] 验证邻接表存的图及其上的基本操作。 [实验内容及要求] 1、 定义邻接表存储的图类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建一个邻接表存储的图; 2)返回图中指定边的权值; 3)返回图中某顶点的第一个邻接顶点; 4)返回图中某顶点关于另一个顶点的下一个邻接顶点的序号; 5)插入操作:向图中插入一个顶点,插入一条边; 6)删除操作:从图中删除一个顶点,删除一条边。 题目2 图的遍历算法实验验证。 [实验目的] 验证图的遍历算法。 [实验内容及要求] 1、 定义邻接表存储的图。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建一个图; 2)图的深度优先遍历的递归算法; 3)图的深度优先遍历的迭代算法; 4)图的广度优先遍历算法。 第四次实验 折半插入排序,堆排序,快速排序 请阅读说明文档
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值