- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
带权有向图带权有向图
中南大学
《数据结构》课程设计
题 目 带权有向图最短路径问题
学生姓名
学 号
指导教师
学 院 信息科学与工程学院
专业班级
完成时间 2013年7月2日
目录
第一部分 课程设计报告 3
第一章、课程设计目的 3
第二章、课程设计内容和要求 3
2.1问题描述: 3
2.2设计要求: 3
第三章、课程设计总体方案及分析 4
3.1 问题分析: 4
3.2 概要设计 6
3.3 详细设计 6
3.4 调试分析 14
3.5 测试结果 14
第二部分 课程设计总结 18
1.调试情况 18
2.程序的优缺点 18
3.心得体会 18
第一部分 课程设计报告
第一章、课程设计目的
通过对采用适当的存储结构实现带权有向图的存储,建立,输入、显示,以及使用Dijkstra算法,寻找和输出带权有向图中某个源点到其余各点的最短路径的实际程序设计,加深对图以及相关数据结构知识的掌握,初步具备相应的数据结构编程能力。
第二章? 课程设计内容和要求
2.1问题描述:
采用适当的存储结构实现带权有向图的存储,建立,输入、显示,以及使用Dijkstra算法,寻找和输出带权有向图中某个源点到其余各点的最短路径。????? ?
2.2设计要求:
要求设计程序输出如下:
建立一个任意带权有向图(图的数据由用户输入),并在屏幕上显示出来;
使用Dijkstra算法求某点到另一个的最短路径;
(3)在屏幕上输出路径;
第三章?、课程设计总体方案及分析
3.1 问题分析:
带权有向图的建立存储:
采用十字链表存储表示,构造有向图G,用邻接矩阵来存储图,用队列存储顶点以及弧度,方便求最短路径。
2.最短路径的搜索:
主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
算法本身并不是按照我们的思维习惯——求解从原点到第一个点的最短路径,再到第二个点的最短路径,直至最后求解完成到第n个点的最短路径,而是求解从原点出发的各有向路径的从小到大的排列,但是算法最终确实得到了从原点到图中其余各点的最短路径,可以说这是个副产品,对于算法的终结条件也应该以求得了原点到图中其余各点的最短路径为宜。清楚了算法的这种巧妙构思后,理解算法本身就不是难题了。
Dijkstra算法流程图如下所示:
3.2 概要设计
1.①采用十字链表存储表示,构造有向图G。
②用邻接矩阵来存储图。
③输出有向图
④构建一个队列用于存储弧度
⑤实现最短路径算法
⑥屏幕上显示操作菜单
2.本程序包含6个主要函数:
(1)主函数 main()
(2)构造有向图的函数 CreateDG(OLGraph *G)
(3)输出有向图的函数 Display(OLGraph G)
(4)给有向图弧赋值的函数 getcost(OLGraph G,int(*Visit)(VertexType))
(5)输出邻接矩阵函数outarcs(OLGraph G)
(6)Dijkstra算法 ShortestPath_DIJ(OLGraph G)
3.3 详细设计
实现概要设计中定义的所有数据类型,对各个操作给出伪代码算法。对于主程序和各个模块也给出相应的伪代码算法。
带权有向图的建立
采用十字链表存储表示,构造有向图G。
int CreateDG(OLGraph *G)
{
int i,j,k;
ArcBox *p;
VertexType v1,v2;
printf(\t请输入有向图的顶点数,弧数(请一次性输入,相互间用空格分开)\n);
scanf(%d%d,(*G).vexnum,(*G).arcnum);
printf(\t请输入%d个顶点的值(%d个字符,请一次性输入,相互间用空格分开):\n,(*G).vexnum,MAX_VERTEX_NAME);
fo
文档评论(0)