
数据结构学习与实验指导
文章平均质量分 94
华师少女的梦
血肉苦弱,机械飞升!
展开
-
基础实验2-2.5 整数分解为若干项之和 (20分) 详细解析dfs
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。输入格式:每个输入包含一个测试用例,即正整数N (0<<<N≤\le≤30)。输出格式:按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1=N_1=N1={n1,n2,⋯n_1, n_2, \cdot...原创 2020-01-30 21:35:20 · 1637 阅读 · 0 评论 -
基础实验7-2.4 PAT排名汇总 (25 分)(慎用long long类型)
这道练习题一开始把学生结构体中的学生对考号对数据类型设置为long long类型,我这么设置是因为考号是13位的整型,结果写完程序后发现最后一个测试点始终是答案错误。后来我把考号的数据类型设置为了string类型才过了所有测试点。我很迷糊这一点,有没有知道我这错误的同学能告诉我一下,感激不尽!我先把这个错误先记录下来,在以后的学习中看能不能知道为什么。下面是代码和相关说明:#include&...原创 2019-11-18 14:02:25 · 821 阅读 · 3 评论 -
基础实验7-2.1 魔法优惠券 (25 分)--大数组要定义在main函数外部,否则容易产生断错误。
在写《数据结构与算法》的基础实验7-2.1魔法优惠券(25分)时,需要定义一些比较大的数组,一开始都是定义在main函数里面,结果提交到oj上时大数据的点始终是断错误,我一直以为时数组越界了,后来才知道大大数组最好不要定义在main函数里面,引用这篇文章的一段话:https://blog.youkuaiyun.com/Tesla_meng/article/details/88370299“全局变量在静...原创 2019-11-17 21:19:54 · 426 阅读 · 0 评论 -
(复习题)念整数
不断用n去除10,得到n是个几位数,得到一个mask;每次用mask除n,得到n的最高位数,同时mask/=10,循环一直做到mask == 0为止;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(Sys...原创 2019-10-15 16:17:03 · 211 阅读 · 0 评论 -
进阶实验5-3.4 迷你搜索引擎 (35 分)
先说点废话,这个题刚开始头铁全部用C写的,写了300多行而去全部是指针操作,但是不管我怎么调试都没办法过最后一个测试点。调试了1个星期后我觉得肯定是太多的指针操作导致了一些很难发现的问题,所有我用C++重写了一遍,用了string,vector,set来避免指针操作,最后终于过了所有测试点。先讲一下这个题的一些细节处理:-用这个strtok()函数来分词。-HashTable的大小大概...原创 2019-10-13 11:32:26 · 3058 阅读 · 5 评论 -
习题4.3 是否二叉搜索树 (25 分)
先介绍第一种方法,后序遍历。思路很简单每次递归调用一次判断函数就能带回来子树T的最大值和最小值。另外要注意二叉搜索树的定义中的一点,简单来说就是根结点的值一定大于左子树的最大值,小于右子树的最小值。千万不要仅仅判断根结点与左右孩子大小的关系。/*后序遍历判断*/bool preJudge(BinTree T, int *minT, int *maxT){ int lmin,l...原创 2019-09-19 20:42:42 · 1793 阅读 · 9 评论 -
进阶实验4-3.1 家谱处理 (30 分)
人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究。实验中,使用计算机处理家谱。为了实现这个目的,研究人员将家谱转换为文本文件。下面为家谱文本文件的实例:家谱文本文件中,每一行包含一个人的名字。第一行中的名字是这个家族最早的祖先。家谱仅包含最早祖先的后代,而他们的丈夫或妻子不出现在家谱中。每个人的子女比父母多缩进2个空格。以上述家谱文本文件为例,John这个家族最早...原创 2019-09-16 21:53:27 · 1821 阅读 · 1 评论 -
基础实验4-2.6 目录树 (30 分)
在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。输入格式:输入首先给出正整数N(≤104),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符):路径和名称中的字符仅包...原创 2019-09-14 10:38:38 · 1719 阅读 · 2 评论 -
基础实验4-2.1 树的同构 (25 分)
判断逻辑和分析:#include<cstdio>#include<algorithm>using namespace std;const int maxv = 20;struct node{ char data; int left,right;};node T1[maxv],T2[maxv];bool compare(int r1, i...原创 2019-09-10 13:19:50 · 365 阅读 · 0 评论 -
进阶实验6-3.5 关键活动 (30 分)
思路:第一步:把所有的入度为0度结点压入队列中并让earliest=0;第二步:进行topsort,并把每个弹出队列的元素压入堆栈中,如果能更新每个弹出元素的邻接点的earliest就更新。第三步:找出所有的earliest = 最短工期的顶点,令它们的latest = earliest。第四步;利用堆栈反向更新每个顶点的latest。第五步:计算每条边的灵活时间,如果等于零说...原创 2019-09-07 15:33:26 · 284 阅读 · 0 评论 -
进阶实验6-3.4 拯救007(升级版) (30 分)
这题很多人可能会用Dijkstra算法或者Floyd算法去算最短路径,其实没有必要,仔细想想这个题其实是一个无权图的单源最短路径问题,针对这种题我们只要用一下BFS就可以轻松愉快解决了,但是要处理好一些细节。⚠️:1、原点是小岛的圆心(0,0),但是岛是有半径的,所以第一跳只能跳不在岛上且距离圆心<=D+7.5的小鳄鱼。具体在程序中实现就是一进入BFS,让James Bond第一跳能到达...原创 2019-09-06 19:29:26 · 1854 阅读 · 15 评论 -
实例6.1 六度空间
这题是广度优先搜索的延伸,需要额外记录层数。一种简单的思路是当每个结点入队时令该结点的所在层数设置为其父节点层数+1。这种方法很好理解也实现起来比较简单所以就不研究了。陈姥姥给出了另外一种解法,不需要在每个结点处都设置一个记录层数的变量,只需要一个tail,last,level这3个变量就可以解决这个问题了可以节省的空间为O(n)。具体实现的思路,我按照上面这个手绘的图进行讲解:首先,...原创 2019-09-03 16:15:21 · 547 阅读 · 0 评论 -
进阶实验6-3.6 最小生成树的唯一性 (35 分)||1016 Uniqueness of MST (35 分)
陈姥姥数据结构学习与实验指导的图章节的最后一个题,我以为日常想想就可以写了,结果想了很久都没想到,然后百度了一下,居然发现有一篇校友的论文完美的解决了这个题,我就复现了论文里的方法。(ps:最小生成树是否唯一 吴宇亮,孔凡龙)我用的是以kruskal算法为基础,也就是论文里的第二个方法。思路:kruskal算法每次都是加入权值最小的边,但是要保证加入的边的两个端点在不同的集合里。关键点是:...原创 2019-09-02 21:56:34 · 1907 阅读 · 1 评论 -
进阶实验6-3.1 红色警报 (25 分)
解决思路:每当一个城市被攻占以后,把这个城市的所有的邻边都删掉,并且lost[city]==true来表示该城市已经被占领,在ListComponents()函数中计算连通分量个数时就跳过这个city。从而,如果删除city后的连通分量的个数大于删除前的连通分量个数,说明该城市是一个枢纽否则是一个普通城市。易错点:1、每次在执行ListComponents()函数时,一定要把vis[]数组重置...原创 2019-09-01 17:29:26 · 277 阅读 · 0 评论 -
基础实验6-2.5 城市间紧急救援 (25 分)
要准备的数组:G[][] 图用邻接矩阵存储,初始化为无穷大,自己到自己初始化为0;dist[] 存储顶点到source的距离,初始化为无穷大;pre[]存储顶点的前驱结点用来输出路径用,初始化为-1;vis[]用来表示顶点已被收录到集合S中,初始化为false;num[]用来存储最短路径的条数,初始化为0;Weight[]存每个点救援队的数目,即点权,直接读入题目给的数据即可,无须初始化;...原创 2019-09-01 14:38:13 · 744 阅读 · 0 评论 -
案例6-1.4 地下迷宫探索 (30 分) DFS非递归实现
思路:先把第一个结点压入栈中,然后进入循环。检查栈中第一个结点有没有未访问过的邻接点,如果有,找到其中最小的,访问并且压入栈中直到某个结点已经没有未访问过的邻接点时,把这个已经没有未访问过的邻结点给pop出去,再返回栈顶元素,检查栈顶元素有没有未访问过的邻接点,有的话向下访问,如果没有的话就继续回溯。(配合着下面的代码(Non_DFS()函数)看思路会好理解点)代码如下:#include...原创 2019-08-28 11:33:05 · 396 阅读 · 0 评论