数据结构大作业例子.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构大作业例子

数据结构大作业 专 业: 班 级: 题 目:最小生成树Kruskal算法 学生姓名: 目 录 1. 任务与目标 1 1.1 课程设计内容 1 1.2 课程设计要求 1 2. 方案设计与论证 2 2.1 课设题目粗略分析 2 2.2 原理图介绍 4 2.2.1 功能模块图 4 2.2.2 流程图分析 5 3. 算法说明 11 3.1 存储结构 11 3.2 算法描述 11 4. 程序运行的测试与分析 13 4.1 调试过程 13 1.2 程序执行过程 13 5. 结论与心得 16 6. 参考文献 16 7. 附 录(关键部分程序清单) 17 任务与目标 1.1 课程设计内容 编写算法能够建立带权图,并能够用Kruskal算法求该图的最小生成树。最小生成树能够选择图上的任意一点做根结点。最小生成树输出采用顶点集合和边的集合的形式。 1.2 课程设计要求 顶点信息用字符串,数据可自行设定。 参考相应的资料,独立完成课程设计任务。 交规范课程设计报告和软件代码。 方案设计与论证 2.1 课设题目粗略分析 根据课设题目要求,拟将整体程序分为三大模块。以下是三个模块的大体分析: 要确定图的存储形式,通过对题目要求的具体分析。发现该题的主要操作是路径的输出,因此采用边集数组(每个元素是一个结构体,包括起点、终点和权值)和邻接矩阵比较方便以后的编程。 Kruskal算法。该算法设置了集合A,该集合一直是某最小生成树的子集。在每步决定是否把边(u,v)添加到集合A中,其添加条件是A∪{(u,v)}仍然是最小生成树的子集。我们称这样的边为A的安全边,因为可以安全地把它添加到A中而不会破坏上述条件。 Dijkstra算法。算法的基本思路是:假设每个点都有一对标号(dj,pj),其中d是从起源点到点j的最短路径的长度(从顶点到其本身的最短路径是零路(没有弧的路),其长度等于零);pj则是从s到j的最短路径中j点的前一点。求解从起源点s到点j的最短路径算法的基本过程如下: 初始化。起源点设置为:①ds=0,ps为空;②所有其它点:di=∞,pi=?;③标记起源点s,记k=s,其他所有点设为未标记的。 k到其直接连接的未标记的点j的距离,并设置: dj=min[dj, dk+lkj] 式中,lkj是从点k到j的直接连接距离。 选取下一个点。从所有未标记的结点中,选取dj中最小的一个i: di=min[dj, 所有未标记的点j] 点i就被选为最短路径中的一点,并设为已标记的。 4)找到点i的前一点。从已标记的点中找到直接连接到i的点j*,作为前一点,设置: i=j* 5)标记点i。如果所有点已标记,则算法完全推出,否则,记k=i,转到2)再继续。 而程序中求两点间最短路径算法。其主要步骤是: 调用dijkstra算法。 将path中的第“终点”元素向上回溯至起点,并显示出来。 2.2 原理图介绍 2.2.1 功能模块图 图2.1 功能模块图 2.2.2 流程图分析 主函数 图2.2 主函数流程图 insertsort函数 图2.3 insertsort函数流程图 3.Kruskal函数 图2.4 Kruskal函数流程图 4. dijkstra函数 图2.5 dijkstra函数流程图 5. printpath1函数 图2.6 printpath1函数流程图 6. printpath2函数 图2.7 printpath2函数流程图 算法说明 3.1 存储结构 定义一个结构体数组,其空间足够大,可将输入的字符串存于数组中。 struct edges {int bv; int tv; int w; }; 3.2 算法描述 1. Kruskal函数: 因为Kruskal需要一个有序的边集数组,所以要先对边集数组排序。其次,在执行中需要判断是否构成回路,因此还需另有一个判断函数seeks,在Kruskal中调用seeks。 2. dijkstra函数: 因为从一源到其余各点的最短路

文档评论(0)

wannian118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档