普里姆算法..docxVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
普里姆算法.

求最小生成树,普里姆(Prim)算法?1、?相关概念1)生成树?一个连通图的生成树是它的极小连通子图,在n个顶点的情形下,有n-1条边。生成树是对连通图而言的,是连同图的极小连通子图,包含图中的所有顶点,有且仅有n-1条边。非连通图的生成树则组成一个生成森林;若图中有n个顶点,m个连通分量,则生成森林中有n-m条边。2)和树的遍历相似,若从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历,?(Traversing Graph)。图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。图的遍历顺序有两种:深度优先有哪些信誉好的足球投注网站(DFS)和广度优先有哪些信誉好的足球投注网站(BFS)。对每种有哪些信誉好的足球投注网站顺序,访问各顶点的顺序也不是唯一的。3)在一个无向连通图G中,其所有顶点和遍历该图经过的所有边所构成的子图G′?称做图G的生成树。一个图可以有多个生成树,从不同的顶点出发,采用不同的遍历顺序,遍历时所经过的边也就不同。在图论中,常常将树定义为一个无回路连通图。对于一个带权的无向连通图,其每个生成树所有边上的权值之和可能不同,我们把所有边上权值之和最小的生成树称为图的最小生成树。求图的最小生成树有很多实际应用。例如,通讯线路铺设造价最优问题就是一个最小生成树问题。 常见的求最小生成树的方法有两种:克鲁斯卡尔(Kruskal)算法和普里姆(Prim)算法。2、?普里姆(Prim)算法1)?算法的基本思想:?普里姆算法的基本思想:普里姆算法是另一种构造最小生成树的算法,它是按逐个将顶点连通的方式来构造最小生成树的。?从连通网络?N = { V, E }中的某一顶点?u0?出发,选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把该边加入到生成树的边集TE中,把它的顶点加入到集合U中。如此重复执行,直到网络中的所有顶点都加入到生成树顶点集合U中为止。假设G=(V,E)是一个具有n个顶点的带权无向连通图,T(U,TE)是G的最小生成树,其中U是T的顶点集,TE是T的边集,则构造G的最小生成树T的步骤如下:?(1)初始状态,TE为空,U={v0},v0∈V;?(2)在所有u∈U,v∈V-U的边(u,v)?∈E中找一条代价最小的边(u′,v′)并入TE,同时将v′并入U;?重复执行步骤(2)n-1次,直到U=V为止。?在普里姆算法中,为了便于在集合U和(V-U)之间选取权值最小的边,需要设置两个辅助数组closest和lowcost,分别用于存放顶点的序号和边的权值。?对于每一个顶点v∈V-U,closest[v]为U中距离v最近的一个邻接点,即边(v,closest[v])?是在所有与顶点v相邻、且其另一顶点j∈U的边中具有最小权值的边,其最小权值为lowcost[v],即lowcost[v]=cost[v][closest[v]],采用邻接表作为存储结构:设置一个辅助数组closedge[]:?lowcost域?存放生成树顶点集合内顶点到生成树外各顶点的各边上的当前最小权值;adjvex域?记录生成树顶点集合外各顶点距离集合内哪个顶点最近(即权值最小)。?应用Prim算法构造最小生成树的过程:如下所示为构造生成树的过程中,辅助数组中各分量值的变化情况,初始归U={v1},加入到U集合中的节点,我们将lowcost改成0以示:2)?算法的C语言描述:typedef int VRType;struct{?VertexType adjvex;?VRType lowcost;?}closedge[MAX_VERTEX_NUM];void MiniSpanTree_PRIM(MGraph G,VertexType u){?int k,j,i,minCost;?k=LocateVex(G,u);?for (j=0;jG.vexnum;++j)?if (j!=k) {?closedge[j].adjvex=u;?closedge[j].lowcost=G.arcs[k][j];?}//初始化closedge[k].lowcost=0;??//将u点加入U集合?for (i=1;iG.vexnum;++i) //选择其余G.vexnum-1个顶点?{??k=minimum(closedge); //求出下一个顶点K?//找k的过程如下minCost=INFINITY;?for (j=0;jG.vexnum;++j)?{if (closedge[j].lowcost minCost closedge[j].lowcost!=0)?{ minCost=closedge[j].lowcost;??k=j;}?}?//过程如上?printf((%c,%

文档评论(0)

vc5gv1x + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档