中国石油大学数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
——数据结构(C语言)课程设计题目:可视化弗洛伊德最短路径
一.实习目的
通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
二.问题描述
设计、实现随机或手动建立一个有向图,可以使用弗洛伊德算法输出有向图中节点之间最短路径及权值,并把有向图和弗洛伊德算法得出的最短路径及最小权值可视化。
三.需求分析
(1)可随机建立有向图,并在屏幕上使图可视化;
(2)可手动建立有向图,添加节点、删除节点、移动节点、添加边、删除边、设置权值,并在屏幕上使图可视化;
(3)对已建立的有向图实现弗洛伊德算法找出最短路径,并在屏幕上使最短路径及最小权值矩阵可视化;
四.概要设计
∙.系统中子程序及功能要求:
数据对象V:一个集合,该集合中的所有元素具有相同的特性
数据关系R:R={VR}
VR={
(1)OnButtonCreategraph()//随机建图按钮;
(2)OnButtonHuman()//手动建图按钮;
(3)OnButtonAddvertex()//添加节点按钮;
(4)OnButtonDeletevertex()//删除节点按钮;
(5)OnButtonMovevertex()//移动节点按钮;
(6)OnButtonAddedge()//添加边按钮;
(7)OnButtonDeleteedge()//删除边按钮;
(8)OnButtonSetweight()//设置权值按钮;
(9)OnButtonFloyd()//弗洛伊德算法按钮;
(10)DrawDGRandom(TCenterPoint, pDC)//随机建图;
(11)DrawDiGraph(CDC *pDC)//图可视化;
(12)DrawVexs(CDC *pDC)//节点可视化;
(13)DrawEdges(CDC *pDC)//边可视化;
(14)InitHand()//存储节点;
(15)CreateDGHand(CPoint centerpoint)//手动建图;
(16)AddVertsHand()//添加节点;
(17)DeleteVex(CPoint vPoint)//删除节点;
(18)AddEdgesHand()//添加边;
(19)DeleteEdge(CGraphVertex* pBeginVex, CGraphVertex* pEndVex)//删除边;
(20)SetEdgeWeightHand ()//设置权值;
(21)Floyd()//弗洛伊德算法;
(22)DrawFloyd(CDC *pDC)//弗洛伊德可视化;
∙各程序模块之间的调用关系(子程序编号见上):
主函数可调用子程序 1、2、3、4、5、6、7、8、9
子程序1可调用子程序10
子程序2、3可调用子程序14、15
子程序3可调用子程序16
子程序4可调用子程序17
子程序6可调用子程序18
子程序7可调用子程序19
子程序8可调用子程序20
子程序9可调用子程序21
子程序10可调用子程序11
子程序16可调用子程序12
子程序17可调用子程序12、19
子程序18、19、20可调用子程序13
子程序21可调用子程序22
五.测试分析
按照附录中的测试数据,得出如下测试、分析结果:
1.建图功能:
(1)随机建图:随机去顶节点的个数与位置及节点之间边的连接、方向与权值大小,并在屏幕上输出图结构;
测试结果:可随机输出一有向图。
(2)手动建图:
a、添加节点:手动添加节点并放在任意位置;
结果:可在任意位置添加节点。
b、删除节点:手动删除一节点;
结果:只能按顺序删除,无法任意删除,有待改进。
c、移动节点:可将某一节点移动到其他位置;
结果:尚未实现。
d、添加边:在任意两个不同节点之间添加任意方向的边;
结果:可以实现添加任意方向的边。
e、删除边:删除任意一条已存在的边;
结果:可以删除任意一条存在的边。
d、设置权值:给任意一条已存在的边赋予权值;
结果:可以赋予权值;
(3)弗洛伊德算法:对已确定的有向图通过Floyd算法找到任意两点间的最短路径并在屏幕上输出最短路径及权值的矩阵;
结果:可正确输出路径及权值。
六.使用说明
1.运行程序,首先出现主界面。主界面首先包括两个个选项:
选项一:随机建图,点击按钮可在屏幕上输出一随机有向图;
选项二:手动建图,可以手动建立有向图。
2.手动建图,出现6个新的选项:
选项一:添加节点,在任意位置点击添加一节点;
选项二:删除节点,可删除一个节点;
选项三:移动节点, 可以移动一节点到其他位置(待改进);
选项四: 添加边,点击一个节点后再点击另外一个即可添加该方向的边;
选项五:删除边,点击按钮后输入想删除的边的两个节点即可删除该边;
选项六:设置权值,点击按钮后输入想添加的边的两个节点及权值即可给该
边赋予权值。
3.弗洛伊德算法:对屏幕上已显示的有向图运行Floyd算法,输出最短路径及权值。七.附录:测试数据