数据结构与算法设计
文章平均质量分 70
用户名不以数字开头
这个作者很懒,什么都没留下…
展开
-
二叉树建立和遍历
二叉树的常用操作算法原创 2022-06-10 06:54:16 · 118 阅读 · 0 评论 -
动态规划 最大子段和
代码来源于《计算机算法设计与分析》-王晓东,我只是整理一下代码笔记方便复习<1> 蛮力法代码;/****************************************** * @Author : 鱼香肉丝没有鱼 * @Date : 2021-09-20 12:55:54 * @LastEditors : 鱼香肉丝没有鱼 * @LastEditTime : 2021-11-24 01:29:41 *********************.原创 2021-12-03 09:46:25 · 187 阅读 · 0 评论 -
动态规划 最长公共子序列
原理以及过程的图解请参考这一篇优秀的博文:https://blog.csdn.net/hrn1216/article/details/51534607代码:来源于《计算机算法与分析》/* * @Author: 鱼香肉丝没有鱼 * @Date: 2021-11-13 19:19:48 * @Last Modified by: 鱼香肉丝没有鱼 * @Last Modified time: 2021-11-14 09:51:24 */#include <cstring>#incl原创 2021-12-02 23:10:45 · 63 阅读 · 0 评论 -
动态规划 矩阵相乘问题
原文链接:https://www.cnblogs.com/fsmly/p/10228767.htmldescription动态规划实现矩阵链乘法问题矩阵链乘法问题( matrix-chain multiplication problem ) (1)问题描述 给定n个矩阵的链<A 1 ,A 2 ,…,A n >,其中i=1,2,…,n,矩阵A i的维数为p i-1 ×p i 。求一个完全“括号化方案”,使得计算乘积A 1 A 2 …A n 所需的标量乘法次数最小 .转载 2021-11-30 19:02:03 · 1100 阅读 · 0 评论 -
网络流之最大流-Ford-Fullkerson算法 DFS && BFS
最近在学数据结构里面的最大流问题,老师讲完以后特意来复习了一下 寻找最大流 在大规模战争中,后勤补给是重中之重,为了尽最大可能满足前线的物资消耗,后勤部队必然要充分利用每条运输网,这正好可以用最大流模型解决。如何寻找一个复杂网络上的最大流呢? 直觉上的方案 一种直觉上的方案是在一个流网络找到一条从源点到汇点的未充分利用的有向路径,然后增加该路径的流量,反复迭代,直到没有这样的路径为止。广度优先搜索可以在一个转载 2021-11-16 10:23:25 · 245 阅读 · 0 评论 -
回溯法 n皇后问题
1 描述nxn棋盘放n个皇后,要求批次不能攻击同行、同列or同一斜线上不能放两个皇后求总共有几种放置方案2 分析对于一个按照要求放入的棋子,他所在的行 i ,列 i’, 都被他占据,还有他的斜线,那么在放置下一个棋子的时候,如果有j==i(不能同行);j’==i’(不能同列),或者是 |i’-i|==|j’-j|(不能在一个斜线上),那么这个和j对应的位置就不能放置,需要寻找下一个位置。算法思想(回溯)backtrace(t)1). 若t>n,得到一个完整的放置方案,记录返回原创 2021-11-05 22:41:07 · 426 阅读 · 0 评论 -
11.表达式求值(1)
我们的教材中已经介绍了表达式求值的算法,现在我们将该算法的功能进行扩展,要求可以处理的运算符包括:+、-、*、/、%(整数取余)、^(乘方)、(、)。采用算符优先算法,计算的中间结果只保留整数。第一行为整数N。表示下面有N个表达式从第二行起的后面N行为N个由整数构成的表达式共N行,每行为相应表达式的计算结果。如果判断出表达式有错误,则输出:error.如果在计算过程中出现除数为0的情况,则输出:Divide 0.特殊情况说明:在表达式中,如果操作数出现负数(例如-8),则要特别注意。例如:10加-8表示为:原创 2022-06-08 16:00:46 · 1212 阅读 · 0 评论 -
13.矩阵的快速转置算法
问题描述数据压缩是提高传输、存储效率一种技术。教材第5章介绍了两种简单的压缩存储方法。本实验要求实现三元组顺序表表示下的矩阵快速转置算法。输入稀疏矩阵的行数、列数、非零元个数(三个数都大于0)以行为主序输入稀疏矩阵三元组表输出辅助数组num[ ]辅助数组cpot[ ]以行为主序输出对应的转置矩阵三元组表测试用例测试输入6 7 81 2 121 3 93 1 -33 6 144 3 245 2 186 1 156 4 -7期待输出num:原创 2021-10-22 20:32:57 · 621 阅读 · 0 评论 -
14. 稀疏矩阵的乘法运算
问题描述数据压缩是提高传输、存储效率一种技术。教材第5章介绍了两种简单的压缩存储方法。本实验要求实现两个稀疏矩阵相乘积的算法。其中稀疏矩阵非零元素数量小于100.输入第1个稀疏矩阵的行数列数非零元个数(三个数都大于0)三元组第2个稀疏矩阵的行数列数非零元个数(三个数都大于0)三元组以行为主序输入稀疏矩阵三元组表输出乘积矩阵的行数列数非零元个数(三个数都大于0)三元组测试用例测试输入3↵4↵4↵1 1 3↵1 4 5↵2 2 -1↵3原创 2021-10-22 23:26:34 · 718 阅读 · 0 评论 -
15. 广义表的建立与基本操作
1.描述1.Status CreateGList( GList &L, char *S ) // 根据字符串 S 表示的广义表内容建立广义表数据结构;2.GList GetHead( GList L) // 取表头运算3.GList GetTail( GList L) // 取表尾运算4.void DestroyGList( GList &L) // 销毁广义表 L5.void PrintGList( GList L) // 显示广义表 L 内容程序运行时,首先输入一个广原创 2021-10-24 13:45:45 · 834 阅读 · 0 评论 -
16. 二叉哥的二叉树
1 问题描述题目描述传说计算机学院有一位前辈叫做二叉哥,他十八般算法样样精通。他当年在程设的时候由于二叉树一举成名。大家为了纪念这一事件,尊称他为二叉哥!二叉树是一个什么样的东西呢?现在我们就来揭开二叉哥的二叉树的神秘面纱吧!下图就是一棵有着9个节点的二叉树。顾名思义,二叉树就像一棵倒着生长的树,每个分叉点可以分出去两个枝条。我们把分叉点叫做"节点”,因为每个分叉点最多可以分出去两个枝条,所以就叫做"二叉”树。最顶层只有一个节点,我们把它叫做根节点。下图中,标号为1的节点就是根节点,它有两个孩子:节点原创 2021-10-31 14:29:35 · 2001 阅读 · 0 评论 -
23. 回溯:最优装载问题
1 描述数据输入: 第1行有两个正整数c和n, 0<c<=100000,n<=100 . 接下来一行是n个正整数w1,w2,...,wn,表示n个集装箱的重量(保证在int内).现要将集装箱放进载重量为c的一艘船上, 并在满足载重量限制的条件下, 求能放进船中的最大重量和对应的方案. 为此将这个问题表述为如下的优化问题:对所有长为n的0,1序列(x1,x2,...,xn),求在满足 w1x1+w2x2+...+wnxn ≤ c 条件下, w1x1+w2x2+...+wnxn的最大值.原创 2021-11-06 13:53:27 · 1081 阅读 · 0 评论 -
17. 二叉树的建立与基本操作
1 问题编写程序实现二叉树的如下操作:1) 建立二叉链表2) 二叉树的先序、中序、后序遍历3) 求二叉树的叶子结点个数4) 将二叉树中所有结点的左、右子树相互交换输入: 扩展二叉树先序序列:ab#d##ce###。其中#代表空指针。输出: 二叉树的凹入表示 二叉树的先序序列、中序序列、后序序列 二叉树叶子结点个数 左、右子树相互交换后的二叉树的凹入表示 左、右子树相互交换后的二叉树的先序序列、中序序列、后序序列。说明: 在输出凹入表示的二叉树时,先输出根结点,然后依次输出左右子树,上原创 2021-10-28 21:21:18 · 1210 阅读 · 0 评论 -
18.二叉树遍历序列还原
1 问题给出二叉树的中序遍历序列和后序遍历序列,编程还原该二叉树。输入: 第1行为二叉树的中序遍历序列 第2行为二叉树的后序遍历序列输出: 二叉树的按层遍历序列 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1以文本方式显示badcfeg↵bdfgeca↵以文本方式显示abcdefg↵1秒64M0测试用例 2以文本方式显示cbdafeg↵cbdfgea↵以文本方式显示adebfgc↵1秒原创 2021-10-29 07:34:45 · 479 阅读 · 0 评论 -
19. 树的建立与基本操作
1 问题描述 程序的输入是一个表示树结构的广义表。假设树的根为 root ,其子树森林 F = ( T1 , T2 , … , Tn ),设与该树对应的广义表为 L ,则 L =(原子,子表 1 ,子表 2 , … ,子表 n ),其中原子对应 root ,子表 i ( 1<i<=n )对应 Ti 。例如:广义表 (a,(b,(c),(d)),(f,(g),(h ),(i))) 表示的树如图所示:原创 2021-10-29 13:06:08 · 730 阅读 · 0 评论 -
20. 前缀码判定
1 描述前缀码:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。请编写一个程序,判断输入的n个由1和0组成的编码是否为前缀码。如果这n个编码是前缀码,则输出"YES”;否则输出第一个与前面编码发生矛盾的编码。输入: 第1行为n(表示下面有n行编码) 第2~n+1行为n个由0或1组成的编码输出:判断结果例如,如果输入:5000110110111每一个字符均不是其他字符编码的前缀,所以,输出:YES再如,如果输入:500011011011编码11与前面的原创 2021-11-03 15:29:21 · 768 阅读 · 0 评论 -
21. 计算WPL——New
哈夫曼树的建立 最短编码问题原创 2021-11-03 22:32:09 · 937 阅读 · 0 评论 -
22. 回溯:运动员配对问题
全排列 回溯 剪枝原创 2021-11-04 17:40:51 · 1505 阅读 · 0 评论 -
24. 皇后的控制力
/** * @Title 对八皇后问题的拓展探究 * @Author 孙琨 * @Date 2013-11-18 * @At XUST * @All Copyright by 孙琨 * */#include <iostream>using namespace std;#define N 8int column[N + 1]; // 同栏是否有皇后,1表示有int rup[2 * N + 1]; // 右上至左下是否有皇后int lup[2 * N原创 2022-04-28 11:41:54 · 2393 阅读 · 1 评论 -
25. 图的广度优先遍历
1 描述本实验实现邻接表表示下无向图的广度优先遍历。程序的输入是图的顶点序列和边序列(顶点序列以*为结束标志,边序列以-1,-1为结束标志)。程序的输出为图的邻接表和广度优先遍历序列。例如:程序输入为:a b c d e f *0,1 0,4 1,4 1,5 2,3 2,5 3,5-1,-1程序的输出为: the ALGraph is a 4 1 b 5 4 0 c 5 3 d 5 2 e 1 0 f 3 2 1the Breadth-First-Seacrh list:aebfdc&nb原创 2022-04-28 11:34:51 · 314 阅读 · 0 评论 -
28. 求单点的最短路径
1 描述求从指定源点出发到各个顶点的最短路径。假设:图中结点名均为单个互不相同的字母,权值均>0。输入: 第一行:结点数量n,弧数量e,源点 后续e行:<结点,结点,权值>输出: 按结点的升序输出到达各个结点的最短路径长度 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1以文本方式显示7,10,a↵<a,b,13>↵<a,c,8>↵<c,d,5>原创 2022-04-28 11:41:20 · 450 阅读 · 0 评论 -
29.活动调度(贪心)
1 描述假设要用很多个教室对一组活动进行调度。我们希望使用尽可能少的教室来调度所有的活动。输入要求:第一行为活动的个数 N(1<=N<=1 000 000) 。接下来 N 行为 Si 和 Fi(0<=Si<Fi<=2 000 000 000) ,分别代表第 i 个活动的开始时间和结束时间。活动 i 的区间段为 [Si,Fi)输出要求:输出有一行 M ,为所需教室的最小数量。 测试输入 期待的输出 时间限制 内存限制原创 2022-04-28 11:40:42 · 1158 阅读 · 1 评论 -
30.小游戏(贪心)
description谷同学很喜欢玩计算机游戏,特别是战略游戏,但是有时他不能尽快找到解所以常常感到很沮丧。现在面临如下问题:他必须在一个中世纪的城堡里设防,城堡里的道路形成一棵无向树。要在结点上安排最少的士兵使得他们可以看到所有边。你能帮助他吗?你的任务是给出士兵的最少数目。输入包含多组数据。每组数据表示一棵树,在每组数据中:第一行是结点的数目。接下来的几行,每行按如下格式描述一个结点:结点标识符 : ( 道路的数目 ) 结点标识符1 结点标识符2 .....原创 2021-11-17 11:35:40 · 525 阅读 · 0 评论 -
31.二分找下标
description设n个不同的整数排好序后存于T[0:n-1]中. 若存在若干(>=0)个下标i,0<= i <=n-1, 使得T[i]=i. 设计一个有效算法找到这些个下标. 数据输入: 第1行有一个正整数n, n<=1000000, 表示有n个整数(保证在int内). 接下来一行是这n个整数.结果输出:T[i]=i的下标;若没有则输出No .注意输出最后有个空格. 测试输入 期待的输出 时间限制 内存限制 额外原创 2021-11-28 08:16:14 · 46 阅读 · 0 评论 -
32. 排序二叉树
description排序二叉树是指左子树的所有节点的值均小于它根节点的值,右子树的所有节点的值均大于它根节点的值。输入:输入有一行,表示若干个要排序的数,输入0时停止输出:二叉树的凹入表示和二叉树的中序遍历序列sample:input:56 78 34 89 12 35 67 77 22 57 0output: 12 22原创 2021-12-04 15:04:30 · 40 阅读 · 0 评论 -
33. 平衡二叉树
description 程序输入一个字符串(只包含小写字母),请按照字符的输入顺序建立平衡二叉排序树,并分别输出二叉树的先序序列、中序序列和后序序列,最后输出该二叉树向左旋转 90 度后的结构。例如:向左旋转 90 度后,以每层向里缩进 4 个空格的方式输出,输出结果为: i g fa d c b输入:agxnzyimk 输出:Preorder: xigamknzyInorder: agikmnxyzPostorder: a原创 2021-12-07 10:02:44 · 63 阅读 · 0 评论 -
34. 堆排序
description用堆排序算法按关键字递减的顺序排序。输入:待排序记录数(整数)和待排序记录(整数序列);输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3) 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1以文本方式显示6↵11↵12↵16↵14↵15↵10↵以文本方式显示16 15 11 14 12 10 ↵15 14原创 2021-12-07 20:42:57 · 53 阅读 · 0 评论 -
35. 快速排序
description要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。 注:1,cutoff值为5,不足cutoff使用插入排序。 2,输入、输出格式参见测试用例0。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1以文本方式显示41↵17↵34↵0↵19↵#↵以文本方式显示After Sorting:↵0 17 19 3原创 2021-12-08 23:34:29 · 296 阅读 · 0 评论 -
36. 油井问题
description主油管道为东西向,确定主油管道的南北位置,使南北向油井喷油管道和最小。要求线性时间完成。1<= 油井数量 <=2 000 000输入要求:输入有油井数量行,第 K 行为第 K 油井的坐标 X ,Y 。其中, 0<=X<2^31,0<=Y<2^31 。输出要求:输出有一行, N 为主管道最优位置的最小值注意:用快排做的不给分!!友情提示:可以采用while(scanf("%d,%d",&x,&y) != EOF)的数原创 2021-12-09 12:54:10 · 224 阅读 · 0 评论 -
37. 套圈
descriptionHave you ever played quoit in a playground? Quoit is a game in which flat rings are pitched at some toys, with all the toys encircled awarded. In the field of Cyberground, the position of each toy is fixed, and the ring is carefully designed so原创 2021-12-11 10:13:09 · 150 阅读 · 0 评论