数据结构实践项目——最短路径和拓扑序列

本文是针对[数据结构基础系列(7):图]的第2组实践例程。

(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…

0710 生成树的概念

0711 最小生成树的普里姆算法

0712 最小生成树的克鲁斯卡尔算法

0713 从一个顶点到其余各顶点的最短路径

0714 每对顶点之间的最短路径

0715 拓扑排序

0716 AOE网与关键路径

纸上谈兵:“知原理”检验题目

1、针对下面的图1:

(图1)

(1)写出图的邻接矩阵;

(2)按照Prim算法的思想,构造出最小生成树;

(3)对照Prim算法的实现,以上图作为参数g的值,用“画一画”的路线,走一遍算法,画出lowest[]和closest[]两个辅助数组的变化过程,“观察”算法执行的过程,从而达到掌握算法的目的;

(4)按照Kruskal算法的思想,构造出最小生成树;

(5)对照Kruskal算法的实现,以上图作为参数g的值,用“画一画”的路线,走一遍算法,画出E[]和vest[]两个辅助数组的变化过程,“观察”算法执行的过程,达到掌握算法的目的;

2、针对下面的图2

(图2)

(1)写出图的邻接矩阵;

(2)按照Dijkstra算法的步骤,求出从顶点0到其余所有顶点的最短路径;

3、某乡有A、B、C、D四个村庄,图3中标识了各村之间的距离。现在要在某村庄修建中心俱乐部,请采用Floyd算法

(图3)

(1)求出各村庄之间的最短路径;

(2)俱乐部的选址,应该使各村到俱乐部的距离之和最小,该选哪个村?

(3)写出各村到中心俱乐部的路径和路径长度。

4、针对下面的图4,尽可能多地写出其拓扑序列

(图4)

课后上机实践

【项目 - 验证算法】运行并本周视频中所讲过的算法,观察结果并领会算法。

(1)Prim算法的验证(使用图1作为测试用例)

(2)Kruskal算法的验证(使用图1作为测试用例)

(图1)

[参考解答: (1) (2)]

(3)Dijkstra算法的验证(使用图2作为测试用例)

(图2)

[参考解答 ]

(4)Floyd算法验证(使用图3作为测试用例)

(图3)

[参考解答 ]

(5)拓扑排序算法验证(使用图4作为测试用例)

(图4)

[参考解答 ]

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-14 18:07:41

数据结构实践项目——最短路径和拓扑序列的相关文章

数据结构实践项目——外部排序

本文是针对[数据结构基础系列(10):外部排序]中的实践项目. [项目-1]置换-选择算法模拟 编敲代码,模拟置换-选择算法生成初始归并段的过程. 设大文件里的记录共同拥有18个: 15 4 97 64 17 32 108 44 76 9 39 82 56 31 80 73 255 68 内存工作区能够容纳5个记录.输出产生的归并段文件. 在模拟中.输入文件数据和输出的归并段数据均直接置在内存中就可以. [參考解答] [项目2]败者树归并模拟 编敲代码,模拟改者树实现5路归并算法的过程. 设有5

数据结构实践项目——队列

本组项目针对<数据结构基础系列(3):线性表>中的7-12课: 7.队列的定义 8. 顺序队的存储及基本操作 9. 环形队列的存储及基本操作 10. 队列的链式存储结构及其基本运算的实现 11. 队列的应用-迷宫问题 12. 双端队列 [项目1 - 建立顺序环形队列算法库] 定义顺序环形队列存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqqueue.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitQueue(SqQueue *&q

数据结构实践项目——树和二叉树(1)

本文针对[数据结构基础系列(6):树和二叉树]第1-10课时 1 树结构导学 2 树的基本概念 3 树的基本术语 4 树的性质 5 树的存储结构 6 二叉树概念和性质 7 二叉树与树.森林之间的转换 8 二叉树的存储结构 9 二叉树的基本运算及其实现 10 二叉树的遍历 [项目1 - 二叉树算法库] 定义二叉树的链式存储结构,实现其基本运算,并完成测试. 要求: 1.头文件btree.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void CreateBTNode(BT

数据结构实践项目——栈

本组项目针对<数据结构基础系列(3):线性表>中的1-6课: 1 "栈和队列"导学 2 栈的定义 3 栈的顺序存储结构及其基本运算实现 4 栈的链式存储结构及其基本运算的实现 5 栈的应用1-表达式求值 6 栈的应用2-迷宫问题 [项目1 - 建立顺序栈算法库] 定义顺序栈存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitStack(SqStack *&

数据结构实践项目——顺序表

[项目1 - 顺序表的基本运算] 领会"0207将算法变程序"部分建议的方法,将顺序表部分的算法变成程序. 实现顺序表基本运算有算法(对应视频0204创建线性表的实现和0205顺序表基本运算的实现),依据"最小化"的原则进行测试.所谓最小化原则,指的是利用尽可能少的基本运算,组成一个程序,并设计main函数完成测试. 作为第一个这种类型的实践(后续每一部分均有这种实践,这是我们学习的基础,也是实践成果积累的基础),结合相关的算法,给出建议的过程: (1)目的是要测试

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

数据结构实践项目——串

本文针对数据结构基础系列网络课程(4):串. 1. 串的基本概念及导学 2. 串的顺序存储及其基本操作实现 3. 串的顺序存储应用 4. 串的链式存储及其基本操作实现 5. 串的模式匹配(Brute-Force算法) 6. 串的模式匹配(KMP算法) [项目1 - 建立顺序串的算法库] 定义顺序串的存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqString.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void StrAssign(SqString &s

数据结构实践项目——树和二叉树(2)

本文针对数据结构基础系列(6):树和二叉树第7, 11-15课时 7 二叉树与树.森林之间的转换 11 二叉树遍历非递归算法 12 层次遍历算法 13 二叉树的构造 14 线索二叉树 15 哈夫曼树 [项目1 - 二叉树算法验证] 运行并重复测试教学内容中涉及的算法.改变测试数据进行重复测试的意义在于,可以从更多角度体会算法,以达到逐渐掌握算法的程度.使用你的测试数据,并展示测试结果,观察运行结果,以此来领会算法. (1)层次遍历算法的验证 [参考链接] (2)二叉树构造算法的验证 [参考链接]

数据结构实践项目——链表

本组项目针对<数据结构基础系列(2):线性表>课程第8-15节 8. 线性表的链式存储 9. 建立单链表 10. 单链表基本操作的实现 11. 单链表应用举例 12. 双链表 13. 循环链表 14. 线性表的应用 15. 有序表 [项目1 - 建立单链表] 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果. 请在下面代码的基础上开展工作: #include <stdio.h> #include <malloc.h> typedef int Ele