- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
合肥学院
计算机科学与技术系
课程设计报告
2013~2014 学年第 2 学期
课程 数据结构与算法 课程设计题目名称 用Kruskal算法求解其所有的最小生成树 学生姓名 童子轩 学号 1204013037 专业班级 12级计本3班 指导教师 何立新
2014 年 9 月
题目
设计程序完成如下功能:对给定的网和起点,用Kruskal算法的基本思想求解其所有的最小生成树。
问题分析及问题定义
题目中的要求是用Kruskal算法来求解最小生成树,首先要弄清楚最小生成树是什么,怎么生成最小生成树以及Kruskal算法的基本思想。
最小生成树的定义是:在图论中,常常将树定义为一个无回路连通图。对于一个带权的无向连通图,其每个生成树所有边上的权值之和可能不同,我们把所有边上权值之和最小的生成树称为图的最小生成树。在一给定的无向图G = (V, E)中,(u, v)代表连接顶点u与顶点v的边,而 w(u,v) 代表此边的权重,若存在T为 E 的子集且为无循环图,使得权重之和w(T) 最小,则此T为G的最小生成树。
最小生成树的特性有:任意一棵树的最小生成树边上的权值之和最小,最小生成树可能不唯一,因为它们的权值之和相等。大多数解决该类问题的算法都基于最小生成树的MST性质。在一个连通网N={V,{E}}中,U是顶点集V的一个非空子集。如果存在一条具有最小权值的边(u,v),其中u∈U,v∈(U-V),则必存在一棵包含(u,v)的最小生成树。
克鲁斯卡尔算法的基本思想是:假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至森林中只有一棵树,也即子图中含有 n-1条边为止。
假如有一张图,有若干个点和边,使用克鲁斯卡尔算法生成最小生成树的基本步骤是:
(1)首先将所有的边的长度进行排序,用排序结果作为后面选择边的依据。选择长度最小的一条边,如果存在多条长度一样小的边,任选一条。
(2)如果有长度一样小的边,再选择这样的另外几条边。
(3)按照边的长度递增的顺序来选择边,如果构成环路则将这条边舍弃,选择其他边,当所有点都连通了后,最小生成树就构建完成。
所以解决问题的方案是首先选择一种方式来存储图中各点与边的信息,然后用冒泡排序对所有边的权值进行排序,再用克鲁斯卡尔算法求网的最小生成树,最后按父亲结点和子女结点集的形式输出生成树中各条边以及它们的权值。
数据结构的选择和概要设计
题目要求是生成最小生成树,要对图中各边的权值进行比较和选择,所以采用邻接矩阵来存储。
存储图中各点的结构体,bv表示起点,tv表示终点,w表示权值
sstruct edges{
int bv;
int tv;
int w;
};
概要设计:
(1)对图中各权值进行排序
排序是通过子函数void insertsort(edgeset ge[],int e)来实现的,这里面权值的指代方式不同,在建立无向图的时候是通过边的两个顶点来存储权值,但是在权值排序的时候只需要用图中边的数组来比较各权值的大小。利用二重for循环,若一条边的权值比另一条边的权值大,然后利用数组ge[0]把两条边的起始点、结束点以及权值进行交换,然后再按照换过之后的顺序从小到大把权值输出。
(2)利用子函数int seeks(int set[],int v)来判断最长小生成树是否构成回路。按照权值排序的结果从最小权值的边开始比较。假如最小生成树的第一条边和第二条边已选定,那么判断是否构成回路就从三条边的起点和终点判断,如果两两相同的话那就构成回路了。
(3)克鲁斯卡尔算法构造最小生成树
克鲁斯卡尔的算法思想是假设连通网N=(V,{E}),则令最小生成树的起始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加到T中,否则舍去此边而选择下一条代价最小的边。以此类推,直至T中所有的顶点都在同一连通分量上为止。
详细设计及编码
(1)克鲁斯卡尔算法的实现
void kruskal(edgeset ge[],int n,int e){
您可能关注的文档
- 《数据库课程设计报告-汽车管理系统》.doc
- 《数据库课程设计报告-电力机车牵引力计算系统》.doc
- 《数据库课程设计报告_学籍管理系统》.doc
- 《数据库课程设计报告-超市进销存管理系统设计》.doc
- 《数据库课程设计报告-通用工资管理系统课程设计》.doc
- 《数据库课程设计报告-餐饮管理系统》.doc
- 《数据库课程设计报告图书销售数据库应用系统的设计与实现》.doc
- 《数据库课程设计报告某医院病房计算机系统》.doc
- 《数据库课程设计留言板系统》.doc
- 《数据库课程设计论文报告书-中小型工厂管理系统设计》.doc
- CNAS-CL63-2017 司法鉴定-法庭科学机构能力认可准则在声像资料鉴定领域的应用说明.docx
- 12J7-3 河北《内装修-吊顶》.docx
- 12N2 河北省12系列建筑标准设计图集 燃气(油)供热锅炉房工程.docx
- 内蒙古 12S8 排水工程 DBJ03-22-2014.docx
- 山西省 12S10 12系列建筑标准设计 管道支架、吊架.docx
- 16J601-木门窗标准图集.docx
- 12J8 河北省12系列《 楼梯》.docx
- CNAS-GL37 2015 校准和测量能力(CMC)表示指南.docx
- CNAS-RL02-2016 能力验证规则.docx
- 津02SJ601 PVC塑料门窗标准.docx
文档评论(0)