网站大量收购闲置独家精品文档,联系QQ:2885784924

C++数据结构第4章第6节最小生成树(C++版)汇编.ppt

C++数据结构第4章第6节最小生成树(C++版)汇编.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C数据结构第4章第6节最小生成树(C版)汇编

引入 一、什么是图的最小生成树(MST)?   不知道大家还记不记得树的一个定理:N个点用N-1条边连接成一个连通块,形成的图形只可能是树,没有别的可能。 引入 引入 Prim算法 Prim算法 Prim算法 Prim算法 Prim算法 Prim算法 Prim算法 Kruskal算法 Kruskal算法 Kruskal算法 Kruskal算法 Kruskal算法 Kruskal算法 Kruskal算法 Kruskal算法 Kruskal算法 Kruskal算法 上机练习 上机练习 * * * 第六节 最小生成树   一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的。 二、最小生成树用来解决什么问题?   就是用来解决如何用最小的“代价”用N-1条边连接N个点的问题。例如: 【例4-9】、城市公交网建设问题 【问题描述】   有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少? 【输入格式】 n(城市数,1=n=100)   e(边数)   以下e行,每行3个数i,j,wij,表示在城市i,j之间修建高速公路的造价。 【输出格式】   n-1行,每行为两个城市的序号,表明这两个城市间建一条高速公路。 【输入样例】   5 8   1 2 2   2 5 9   5 4 7   4 1 10   1 3 12   4 3 6   5 3 3   2 3 8 【输出样例】    1 2    2 3    3 4    3 5   Prim算法采用与Dijkstra、Bellman-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点。 算法描述: 以1为起点生成最小生成树,min[v]表示蓝点v与白点相连的最小边权。 MST表示最小生成树的权值之和。 a)初始化:min[v]= ∞(v≠1); min[1]=0;MST=0; b)for (i = 1; i= n; i++) 1.寻找min[u]最小的蓝点u。 2.将u标记为白点 3.MST+=min[u] 4.for 与白点u相连的所有蓝点v if (w[u][v]min[v]) min[v]=w[u][v]; c)算法结束: MST即为最小生成树的权值之和 算法分析思想讲解: Prim算法每次循环都将一个蓝点u变为白点,并且此蓝点u与白点相连的最小边权min[u]还是当前所有蓝点中最小的。这样相当于向生成树中添加了n-1次最小的边,最后得到的一定是最小生成树。   我们通过对下图最小生成树的求解模拟来理解上面的思想。蓝点和虚线代表未进入最小生成树的点、边;白点和实线代表已进入最小生成树的点、边。 初始时所有点都是蓝点,min[1]=0,min[2、3、4、5]=∞。权值之和MST=0。 1 2 3 4 5 2 4 7 1 1 6 2 第一次循环自然是找到min[1]=0最小的蓝点1。将1变为白点,接着枚举与1相连的所有蓝点2、3、4,修改它们与白点相连的最小边权。 1 2 3 4 5 2 4 7 1 1 6 2 min[2]=w[1][2]=2; min[3]=w[1][3]=4; min[4]=w[1][4]=7; 第二次循环是找到min[2]最小的蓝点2。将2变为白点,接着枚举与2相连的所有蓝点3、5,修改它们与白点相连的最小边权。 1 2 3 4 5 2 4 7 1 1 6 2 min[3]=w[2][3]=1; min[5]=w[2][5]=2;    第三次循环是找到min[3]最小的蓝点3。将3变

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档