克鲁斯卡尔算法求最小生成树
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1.需求分析 (2)
1.1 设计题目 (2)
1.2 设计任务及要求 (2)
1.3课程设计思想 (2)
1.4 程序运行流程 (2)
1.5软硬件运行环境及开发工具 (2)
2.概要设计 (2)
2.1流程图 (2)
2.2抽象数据类型MFSet的定义 (3)
2.3主程序 (4)
2.4抽象数据类型图的定义 (4)
2.5抽象数据类型树的定义 (5)
3.详细设计 (7)
3.1程序 (7)
4.调试与操作说明 (10)
4.1测试结果 (10)
4.2调试分析 (11)
5.课程设计总结与体会 (11)
5.1总结 (11)
5.2体会 (11)
6. 致谢 (12)
7. 参考文献 (12)
1.需求分析
1.1 设计题目:最小生成树
1.2 设计任务及要求:任意创建一个图,利用克鲁斯卡尔算法,求出该图的最小生成树。
1.3 课程设计思想:Kruskal算法采用了最短边策略(设G=(V,E)是一个无向连通网,令T=(U,TE)是G的最小生成树。最短边策略从TE={}开始,每一次贪心选择都是在边集E中选择最短边(u,v),如果边(u,v)加入集合TE中不产生回路,则将边(u,v)加入边集TE中,并将它在集合E中删去。),它使生成树以一种任意的方式生长,先让森林中的树木随意生长,每生长一次就将两棵树合并,最后合并成一棵树。
1.4程序运行流程:
1)提示输入顶点数目;
2)接受输入,按照项目要求产生边权值的随机矩阵;然后求解最小生成树;
3)输出最小生成树并且退出;
1.5 软硬件运行环境及开发工具:VC
2.概要设计
2.1流程图
图1流程图
2.2抽象数据类型MFSet的定义:
ADT MFSet {
数据对象:若设S是MFSet型的集合,则它由n(n>0)个子集Si(i = 1,2...,n)构成,每个子集的成员代表在这个子集中的城市。
数据关系: S1 U S2 U S3 U... U Sn = S, Si包含于S(i = 1,2,...n)
Init (n): 初始化集合,构造n个集合,每个集合都是单成员,根是其本身。rank 数组初始化0
Find(x):查找x所在集合的代表元素。即查找根,确定x所在的集合,并路径压缩。
Merge(x, y):检查x与y是否在同一个集合,如果在同一个集合则返回假,否则按秩合并这两个集合并返回真。
}
2.3主程序:
int main()
{
初始化;
while (条件)
{
接受命令;
处理命令;
}
return 0;
}
2.4抽象数据类型图的定义如下:
ADT Graph{
数据对象V:V是具有相同特性的数据元素的集合,成为顶点集。
数据关系R:R={VR} VR={
基本操作P:
CreateGraph(&G,V,VR);
初始条件:V是图的顶点集,VR是图中弧的集合。
操作结果:按V和的VR定义构造图G。
DestoryGraph(&G);
初始条件:图G存在。
操作结果:销毁图G。
LocateVex(G,u);
初始条件:图G存在,u和G中是顶点有相同特征。
操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。
GetVex(G,v);
初始条件:图G存在,v是G中某个顶点。
操作结果:返回v的值。
PutVex(&G,v,value);
初始条件:图G存在,v是G中某个顶点。
操作结果:对V赋值value,
FirstAdjVex(G,v);
初始条件:图G存在,v是G中某个顶点。
操作结果:返回v的第一个邻接顶点。若顶点在G中没有顶点,
则返回“空”。
NextAdjVex(G,v,w);
初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。
操作结果:返回v的(相对于w的)下一个邻接顶点。若w是v的最后一个邻接顶点,则返回“空”。
InsertVex(&G,v);
初始条件:图G存在,v和途中顶点有相同特征。
操作结果:在图G中添加新顶点v。
DeleteVex(&G,v);
初始条件:图G存在,v是G中某个顶点。
操作结果:删除G中顶点v及其相关的弧。
InsertArc(&G,v,w);
初始条件:图G存在,v和w是G中两个顶点。
操作结果:在G中添加弧
初始条件:图G存在,v和w是G中两个顶点。
操作结果:在G中删除弧
初始条件:图G存在,Visit是顶点的应用函数。
操作结果:对图进行深度优先遍历。在遍历过程中对每个顶点调用函数
Visit一次且仅一次。一旦Visit()失败,则操作失败。
BFSTravrese(G,Visit());
初始条件:图G存在,Visit是顶点的应用函数。
操作结果:对图进行广度优先遍历。在遍历过程中对每个顶点调用函数Visit 一次且仅一次。一旦Visit()失败,则操作失败。
}ADT Graph
2.5抽象数据类型树的定义如下:
ADT Tree{
数据对象D:D是具有相同特性数据元素的集合。
数据关系R:若D为空集,则称为空树;若D仅含一个元素数据,则R为空集,否则R={H},H是如下二元关系:
(1)在D中存在唯一的称为根的数据元素root,它在关系H 下无前驱;