最小生成树问题

上传人:re****.1 文档编号:557371159 上传时间:2022-12-07 格式:DOC 页数:18 大小:96.50KB
返回 下载 相关 举报
最小生成树问题_第1页
第1页 / 共18页
最小生成树问题_第2页
第2页 / 共18页
最小生成树问题_第3页
第3页 / 共18页
最小生成树问题_第4页
第4页 / 共18页
最小生成树问题_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《最小生成树问题》由会员分享,可在线阅读,更多相关《最小生成树问题(18页珍藏版)》请在金锄头文库上搜索。

1、 榆林学院12届课程设计 最小生成树问题课程设计阐明书 学生姓名: 赵佳 学 号: 院 系: 信息工程学院 专 业: 计算机科学与技术 班 级: 计14本1 指引教师: 答辩时间: 年 月 日 最小生成树问题一、 问题陈述最小生成树问题设计规定:在n个都市之间建设网络,只需保证连通即可,求最经济的架设措施。存储构造采用多种。求解算法多种。二、 需求分析1. 在n个都市之间建设网络,只需保证连通即可。2. 求都市之间最经济的架设措施。3.采用多种存储构造,求解算法也采用多种。三、 概要设计1、 功能模块图开始创立一种图功能选择1.建立邻接矩阵2.建立邻接表3.kruskal算法4. PRIM算法

2、结束2、功能描述(1) CreatUDG()创立一种图:通过给顾客信息提示,让顾客将都市信息及都市之间的联系关系和连接权值写入程序,并根据写入的数据创立成一种图。(2) Swtch()功能选择:给顾客提示信息,让顾客选择相应功能。(3) Adaecy_Maix()建立邻接矩阵:将顾客输入的数据整顿成邻接矩阵并显目前屏幕上。(4) Adjacny_Li()建立邻接表:将顾客输入的数据整顿成临接表并显目前屏幕上。(5) MiniSanTeeRSL()krusal算法:运用kska算法求出图的最小生成树,即:都市之间最经济的连接方案。(6) MiniSpanTeRIM()PI算法:运用PRIM算法求

3、出图的最小生成树,即:都市之间最经济的连接方案。四、 具体设计本次课程设计采用两种存储构造以及两种求解算法。1、两种存储构造的存储定义如下:tedef strutArell doubl aj; Arcell,AMtrxMXRTEX_NUMMAXVERTEX_UM; tyedefstrut aveA_VRTX_UM; /节点数组 AdjMrix arc; /邻接矩阵 nt exu,arcnum; /图的目前节点数和弧数 Mraph; ypee struct Pode /用于普利姆算法 char jve; /节点 doblelowct; /权值Pn,ClsedgeMA_VRXNUM;/记录顶点集U

4、到V-U的代价最小的边的辅助数组定义typdef structnode用于克鲁斯卡尔算法中存储一条边及其相应的2个节点 hrh1; /节点1 char 2; /节点 doube value;/权值od,DevluMA_VRE_M; 2、求解算法采用Pim算法和Kuskal算法。(1)普里姆算法(Prim)算法普里姆算法(Prim)算法是一种构造性算法,生成最小生成树的环节如下:初始化=v。以v到其她顶点的所有边为候选边。反复一下环节(n-)次,使得其她(n-1)个顶点被加入到U中。从候选边中挑选权值最小的边加入E,设该边在VU中的顶点是vk,将顶点vk加入到U中;考察目前VU中的所有顶点vj

5、,修改候选边:若(vk,vj)的权值不不小于本来和j关联的候选边,则用(vk,vj)取代后者作为候选边。 开始标志顶点1加入U集合寻找满足边的一种顶点在U,另一种顶点在V的最小边形成n-1条边的生成树顶点k加入U修改由顶点k到其她顶点边的权值结束得到最小生成树(2)克鲁斯卡尔(Kruskal)算法克鲁斯卡尔(Kruskl)算法是一种按权值的递增顺序选择合适的边来构造最小生成树的措施。假设G=(,E)是一种具有个顶点的带权连通无向图,T=(U,TE)是的最小生成树,则构造最小生成树的环节如下:置U的初值等于V(即包具有G中的所有顶点),TE的初值为空集(即图T中每一种顶点都构成一种分量)。将图G

6、中的边按权值从小到大的顺序依次选用:若选用的边未使生成树形成回路,则加入TE,否则舍弃,直到TE中涉及(n-)条边为止。3、使用的函数int eatUDG(Mrph & G,Dgevae gevl); in LoateVex(MGrh G,a ch); it inimu(GaphG,loge clodge); vid iniSanTreePM(Graph G,char u); void od(Devalu galu,MGra);voidAjacncyatri(MGraph );oidAdjacency_ist(MGrah,Dgvale gevalu);函数之间的调用关系图:CreateUDG(

7、)main()Adjacency_Matrix()Adjacency_List()MiniSpanTree_KRSL()MiniSpanTree_PRIM()locateVex()locateVex()Minimum()locateVex()Sortdge()五、 程序代码#incle #inclue #cudeisream.h #efn A_VREUM20 dfine O1 #defie ERRO 0#efne M 1000 tyedf stut rell doble adj; Arel,dMatrixMAXERTEX_UMAX_VETE_NUM; ypedef ruc char vexsX

8、VERTEX_NUM; /节点数组 Adjatrixs; /邻接矩阵 int exnu,arnum; 图的目前节点数和弧数 MGrap; tedef strct Pnode /用于普利姆算法 a djvex; 节点 oble lowcost; /权值 Pnode,lsedeMAVETE_NU;/记录顶点集U到V-U的代价最小的边的辅助数组定义tyeefrucKno/用于克鲁斯卡尔算法中存储一条边及其相应的个节点 char ch1; /节点1 cha ch2; /节点2 doublevalue;/权值 Knode,gealeAXVEEXNU; nt Create(MGraph & G,Dgeva

9、lue &dgevalu); n LoateVe(MGraph G,ca ch); intMinmum(ap ,Cosede closdge); voidMiniSpanTe_PRIM(MGrah ,char u); d Sordge(gevalue dgevalue,MGrh G); oiddjacency_Matx(MGraph G);vid Ajacenc_Lit(Gaph ,Dgeae geue);inteateUG(MGa & G,Dgevale& dvue)/构造无向加权图的邻接矩阵 int i,j,k; couG.venum.anum; cout请输入各个都市名称(分别用一种字符

10、替代):; for(i=0;iG.ve; for(=0;iG.exnum;+i)/初始化数组 for(=0;jG.vexnu;+j) Garcsi.ad=MA; cout请输入两个都市名称及其连接费用(严禁连接反复输入!):ndl; for(=;k dgevauek.h1 devluch2 gevaluek.vlue; i =LocteVex(G,devauek.ch1); j Lcatex(G,dvaluekc); G.ars.adj =dgealuek.value; Garcsji.adj = G.arjj; return OK; intocaeVex(Mph G,charh) /拟定节点h在图.ves中的位置 i a; or(int i=0; iG.vexnum; i+) i(G.ve =ch) =i; tur a; void AdjcencMarx(Mraph G) /用邻接矩阵存储数据nt i,j;for(i=; .nm; i+) for(j=;jG.exnu;j+) if(.arcsi.aj=MA)cou0 ; eleouG.arci.ad ; couten; void Ajacncy_Lit(MGrh G,Dgevlue dge

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号