- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE / NUMPAGES
福建农林大学计算机与信息学院
计算机类
课程设计报告
课程名称:
数据结构
课程设计题目:
图的算法实现
(1)将图的信息建立文件;2)从文件读入图的信息,建立邻接矩阵和邻接表;(3)实现Prim、Kruskal、Dijkstra和拓扑排序算法。
姓 名:
易向阳
系:
计算机
专 业:
计算机科学与技术(专升本)
年 级:
07级
学 号:
071806019
指导教师:
黄思先
职 称:
副教授
2008年 06月 28日
目 录
1.课程设计的目的…………………………………………………………4
2.课程设计要求……………………………………………………………4
3.算法思想描述……………………………………………………………4
3.1、存储结构的建立……………………………………………………4
3.2、Prim算法……………………………………………………………4
3.3、Kruskal算法…………………………………………………………5
3.4、Dijkstra算法………………………………………………………5
3.5、拓扑排序算法………………………………………………………5
4.程序结构…………………………………………………………………5
5.测试结果…………………………………………………………………6
6.总结………………………………………………………………………7
参考文献………………………………………………………………………8
附录:…………………………………………………………………………9
1.课程设计的目的
此次课程设计的目的是以C语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风,同时培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。
2.课程设计要求
图的算法实现
(1)将图的信息建立文件;
(2)从文件读入图的信息,建立邻接矩阵和邻接表;
(3)实现Prim、Kruskal、Dijkstra和拓扑排序算法。
3.算法思想描述
本程序涉及到图的存储结构的建立、Prim、Kruskal、Dijkstra和拓扑排序算法。
3.1、存储结构的建立:
实现从文件中读入图的信息,同时建立:有向邻接矩阵、无向邻接矩阵、有向邻接表、无向邻接表。
首先进行有向邻接矩阵、邻接表和无向邻接矩阵、邻接表的初始化。
初始化有向邻接矩阵和无向邻接矩阵时,因为不知道会读入几个顶点和几条边,所以取无向邻接矩阵,把它存顶点的字符数组各字符初始化为“*”,以方便判断顶点名称记录到哪了。各边的度都初始化为9999,表示不连通.顶点数和边数都初始为0, GraphKind分别初始为YOUXIANG,WUXIANG。
初始化有向邻接表和无向邻接表时,顶点数、边数、GraphKind初始方法同上. 所有firstarc指向NULL表示还没有边。
接着,向四个图中记录读入边的信息。用一个函数判断新读入的边的顶点是否在以前读入的信息中出现过,若没出现过则去记录顶点名称,出现过则不用了。无向图把信息当作无向的,一次添加两条边,有向图把信息当作有向的,一次只添加一条边,邻接矩阵添加边时,在二维数组对应位置填入边的权,邻接表添加边时,动态申请一个AreNode,加入边的信息后,用头插法插入相应位置。
3.2、Prim算法:
设图中顶点的全集为V, U中存放已选中过的点,用数据结构closedge[]存放选择需要的数据,先把下标0对应点放入U中, closedge[i].uxiabiao=0,(因为U中只有下标0这一个点), closedge[i].lowcost中存放其他点到下标为0的点的权,closedge[0].lowcost=0;表示下标为0的点已在U中了。在closedge按顺序找到最先不在U中,且与U中点直接相连的点,把此边的权赋给min,用擂台式比较法选出closedge[j].lowcost中最小的,此时min中存放的是最小值所在下标,也就是下一个要放入U中的点的下标。输出选中的这条边,它是最小生成树中的一条边。因为U中又加入了一个点,所以要修改closedge[i].lowcost的值,比较新选中点与V-U中点的权和原来的closedge[i].lowcost,取小的那个存入。然后
文档评论(0)