最小生成树的求解方法与分析.pptx

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
讨论课题: 最小生成树的求解方法与分析目录点击添加文本010203点击添加文本组内成员分工介绍背景知识最小生成树的求解方法与分析点击添加文本点击添加文本最小连接问题交通网络中,常常关注能把所有站点连接起来的生成树,使得该生成树各边权值之和为最小。例如:假设要在某地建造5个工厂,拟修筑道路连接这5处。经勘探,其道路可按无向边铺设。现在每条边的长度已经测出并标记在对应边上,如果我们要求铺设的道路总长度最短,如何铺设?背景知识最小生成树:在连通边赋权图G中求一棵总权值 最小的生成树。该生成树称为最小生成树或最小代价树。构造最小生成树的思想构造最小生成树可以有多种算法。其中多数算法利用了最小生成树的一种简称为MST的性质:假设N=(V,{E})是一个连通网(v代表顶点集,E代表边集),U是顶点集V的一个非空子集。若(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u,v)的最小生成树。最小生成树构造点击添加文本算法点击添加文本点击添加文本普里姆算法克鲁斯卡尔点击添加文本普里姆算法从连通网N={V,E}中的某一顶点U0出发,选择与它关联的具有最小权值的边(U0,v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合U中。如此继续下去,直到网中的所有顶点都加入到生成树顶点集合U中为止普里姆算法V1利用该图按普里姆算法构造一棵最小生成树561V4V255V363426V5V6V1V1556611V255V4V3V334626V5V6 iclosedgev2v3v4v5v6UV-Ukadjvexlowcost{V2,V3,V4,V5,V6}V1V1{V1}V1v3615V1V155611V2555V4V3V35V6V6 iclosedgev2v3v4v5v6UV-Ukadjvexlowcost{V2,V4,V5,V6}V1V3V3{V1,V3}V3v650564V1561V2555V4V4V334466226V5V6V6 iclosedgev2v3v4v5v6UV-Ukadjvexlowcost00V6{V1,V3,V6}V3V3{V2,V4,V5}v4526V1561V2V2555V4V45V6 iclosedgev2v3v4v5v6UV-Ukadjvexlowcost000{V1,V3,V6,V4}V3V3{V2,V5}v256V1561V2V2555V4V3334626V5V5V6 iclosedgev2v3v4v5v6UV-Ukadjvexlowcost0000V2{V1,V3,V6,V4,V2}{V5}v53V1561V255V4V3334626V5V5V6 iclosedgev2v3v4v5v6UV-Ukadjvexlowcost00000{ }{V1,V3,V6,V4,V2,v5}普里姆核心算法// 用普里姆算法从第u个顶点出发构造网G的最小生成树T,输出T的各条边void MiniSpanTree_PRIM(MGraph G,VertexType u){ int i,j,k; Closedge closedge; k=LocateVex(G,u); for(j=0;jG.vexnum;++j) // 辅助数组初始化 { if(j!=k) { strcpy(closedge[j].adjvex,u); closedge[j].lowcost=G.arcs[k][j].adj; } }../../普里姆算法/普里姆.cpp..\..\普里姆算法\普里姆.cpp closedge[k].lowcost=0; // 初始时,U={u} printf(最小代价生成树的各条边为:\n); for(i=1;iG.vexnum;++i) { // 选择其余G.vexnum-1个顶点 k=MiniNum(closedge,G); // 求出T的下一个结点:第K顶点 printf((%s-%s)%d\n,closedge[k].adjvex,G.vexs[k],closedge[k].lowcost); // 输出生成树的边 closedge[k].lowcost=0; // 第K顶点并入U集 for(j=0;jG.vexnum;++j) if(G.arcs[k][j].adjclosedge[j].lowcost) { // 新顶点并入U集后重新选择最小边 strcpy(closedge[j].adjvex,G.vexs[k]); closedge[j].lowcost=G.arcs[k][j].adj; } }}普里姆算法分析假设网中有n个顶点,则第一个进行初始化的循

文档评论(0)

懒懒老巢 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档