收藏 分享(赏)

n个城市最小生成树实验报告.doc

上传人:精品资料 文档编号:10628204 上传时间:2019-12-10 格式:DOC 页数:14 大小:89KB
下载 相关 举报
n个城市最小生成树实验报告.doc_第1页
第1页 / 共14页
n个城市最小生成树实验报告.doc_第2页
第2页 / 共14页
n个城市最小生成树实验报告.doc_第3页
第3页 / 共14页
n个城市最小生成树实验报告.doc_第4页
第4页 / 共14页
n个城市最小生成树实验报告.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、数 据 结 构课 程 设 计 报 告起评分 理论成绩 实践成绩 总成绩院系: 专业: 班级: 学号: 姓名: 教师: 时间: 目 录1、设计要求.31、问题描述32、功能33、数据3二、概述与分析31、图32、邻接矩阵33、生成树44、最小生成树55、最小生成树的操作5三、程序设计及分析.6四、流程图.71、模块结构流程图72、Prim 算法流程设计.8五、测试分析8六、总结10七、源程序代码.10一、设计要求:1、 问题描述构造可以使 n 个城市连接的最小生成树。2、功能给定一个地区的 n 个城市间的距离网,用 Prim 算法或 Kruskal 算法建立最小生成树,并计算得到的最小生成树的代

2、价。本人采用的是 Prim 算法。3、数据城市间的距离网采用邻接矩阵表示(要求至少 6 个城市,10 条边) ,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。表示城市间距离网的邻接矩阵(要求至少 6 个城市,10 条边)二、概述与分析1、图图的定义:图 G 是有两个集合 V 和 E 组成,记做 G=(V,E) ,其中 V 是定点的有限集合,记做 V(G),E 是连接 V 的两个不同的顶点的边的有限集合,记做E(G)。2、邻接矩阵邻接矩阵是图的一

3、种存储方法,它是表示顶点之间相邻关系的矩阵。设G=(V,E)是具有 n(n0)个顶点的图,顶点的顺序依次为(v 0,v1, ,vn-1),则 G的邻接矩阵 A 是 n 阶方阵,其定义如下。1) 如果 G 是无向图,则1 (vi,vj) E(G)Aij= 0 其他2) 如果 G 是有向图,则1 E(G)Aij= 0 其他3) 如果 G 是带权无向图,则wij viv j且(v i,vj) E(G)Aij= 0 vi=vj 其他4) 如果 G 是带权有向图,则wij viv j且 E(G)Aij= 0 vi=vj 其他邻接矩阵的特点如下:1) 图的邻接矩阵表示是唯一的。2) 无向图的邻接矩阵一定是

4、一个对称矩阵。因此,按照压缩存储的思想,在具体存放邻接矩阵是只需要存放上(或下)三角形阵的元素即可。3) 不带权的有向图的邻接矩阵一般是稀疏矩阵,因此,当图的顶点较多时,可以采用三元组表的方法存储邻接矩阵。4) 对于无向图,邻接矩阵的第 i 行(或第 i 列)非零元素(或非元素)的个数正好是第 i 个顶点 Vi的度。5) 对于有向图,邻接矩阵的第 i 行(或第 i 列)非零元素(或非元素)的个数正好是第 i 个顶点 vi的出度(或入度) 。6) 用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连。但是,要确定图中有多少条边,则必须按行和按列对每个元素进行检测,所花费的时间大家很大

5、,这是用邻接矩阵存储图的局限性。3、生成树一个连通图的生成树是一个极小连通图,它含有图中全部顶点,但只有构成一颗树的(n-1)条边。如果在一颗生成树上添加一条边,必定构成一个环:因为这条边使得它依附的那两个顶点之间有了第 2 条路径。一颗有 n 个顶点的生成树(连通无回路图)有且仅有(n-1)条边,则一定有回路。但是,有(n-1)条边的图不一定都是生成树。生成树的特点:1、 连通且无环;2、 包含原图中的全部 n 个顶点,但只有 n-1 条边;3、 是原图的极小连通子图;4、最小生成树对于一个带权(假定每条边上的权值均大于零的实数)连通无向图 G 中的不同生成树,其每棵树的所有边上的权值之和也

6、可能不同;图的所有生成树中的具有边上的权值之和最小的树成为图的最小生成树。最小生成树的典型用途:欲在 n 个城市间建立通信网. n 个城市可能有 n(n-1)/2 条线路,但铺 n-1条线路即可连通;因为每条线路都会有对应的经济成本,那么,如何选择 n1条线路,使总费用最少?构造数学模型:顶点表示城市,有 n 个;边表示线路,有 n1 条;边的权值表示线路的经济代价;连通网表示 n 个城市间通信网。5、最小生成树的操作1、 Prim 算法:假设 G=(V,E)是连通图,T=(U,TE)为欲构造的最小生成树,初始化 U=u0,TE 为空,重复以下操作:在所有 uU,vV-U 的边(u,v) E

7、中,选择一条权最小的边(u,v)并入 TE,同时将 v 并入 U,直到 U=V 为止,此时 T=(U,TE)是 G 的一棵最小生成树。 2、 在 prim 算法中需要解决的两个问题:1) 在无向网中,当出现从一个顶点到其它顶点时,若其边上的权值相等,则可能从某一起点出发时会得出不同的最小生成树,但最小生成树的权必定都相等,此时我们应该怎样将所有的最小生成树求解出来;2) 每次如何从生成树 T 中到 T 外的所有边中,找出一条最短边。例如,在第 k 次(1kn-1)前,生成树 T 中已有 k 个顶点和 k-1条边,此时 T 中到 T 外的所有边数为 k(n-k),当然它也包括两顶点间没有直接边相

8、联,其权值被看做常量 INF 的边在内,从如此多的边中查找最短边,其时间复杂度为 O(k(n-k),显然是很费时的,是否有一种好的方法能够降低查找最短边的时间复杂度。三、程序设计及分析定义结构体和常量#define MAXV 30#define INF 32767 /INF 表示无穷大struct Nodeint weight; int vex;/存放顶点编号int lowcost;/存放顶点权值;struct MGraphint vexsMAXV,n,e; /vexs 表示顶点向量 ;n,e 分别表示图的顶点数和边数Node cityMAXVMAXV; /邻接矩阵;Node closestM

9、AXV;/ 存放每个顶点所连接的边所对应的权值1. 函数功能int Locate(MGraph /最多顶点个数const int INF=32768;/表示极大值,即struct Nodeint weight; int vex;/存放顶点编号int lowcost;/存放顶点权值;struct MGraphint vexsMAXV,n,e; /vexs 表示顶点向量 ;n,e 分别表示图的顶点数和边数Node cityMAXVMAXV; /邻接矩阵;Node closestMAXV;/求最小生成树时的辅助数组int Locate(MGraph for(k=0;kg.n;if(g.ng.e;for(i=0;ig.vexsi;cout!“v1v2vex; /输入一条边的两个顶点及权值i=Locate(g,v1);j=Locate(g,v2);g.cityij.weight=vex;g.cityji.weight=vex;return(g);int Min(MGraph min=INF;for(i=0;ist;while(1)if(st=0) break;else if(stg.n)coutst;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报