图及其应用(二).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
五、图的常用算法 一、求图的最小生成树算法 所有顶点均由边连接在一起,但不存在回路的图叫生成树。 一个图可以有许多棵不同的生成树 所有生成树具有以下共同特点: 生成树的顶点个数与图的顶点个数相同 一个有n个顶点的连通图的生成树有n-1条边 在生成树中再加一条边必然形成回路 含n个顶点n-1条边的图不一定是生成树 最小生成树:对于带权连通图,生成树的权即为生成树中所有边上的权值总和,权值最小的生成树称为图的最小生成树。 有两种求最小生成树的算法: Prim算法 Kruskal算法 最小生成树:对于带权连通图,生成树的权即为生成树中所有边上的权值总和,权值最小的生成树称为图的最小生成树。 有两种求最小生成树的算法: Prim算法 Kruskal算法 Prim算法 算法思想 设G=(V,E)是连通图,TE是G上最小生成树中边的集合 初始令红点集U={v0},(v0?V), TE=? 在所有u?U,v?V-U的边(u,v)?E中,找一条代价最小的边(u,v) 将边(u,v)并入集合TE,同时v并入U 重复上述操作直至U=V为止,则T=(V,{TE})为G的最小生成树 算法实现:图用邻接矩阵表示 算法评价:时间复杂度O(n2) 算法实现 维护两个数组,lowcost[MAXN]和closest[MAXN]. 对每个蓝色顶点i?V-U closest[i] = j 表示j?U,j是红点。(j,i)是一条边,且是蓝点i到红点集U中各顶点距离最近(权最小的边)的边。 lowcost[i]:用来记录蓝点i到红点集 U 中各顶点“权最小的边”的权值。 算法框架: (1)初始化:对顶点1~n, lowcost[i]初始化成cost[v0][i], closest[i]初始化成v0 (2)找n-1条权值最小的边 找第i条权值最小的边: 在顶点1~n中找lowcost[j] min 并且 lowcost[j] != 0的顶点j, 保存并更新最小权值min及其顶点k.边(k,closest[k])即是第i条最小边. (3)将k加入U:lowcost[k] = 0; (4)调整其它顶点到U中顶点的”距离”. void prim(int v0) //以顶点v0为起点构造最小生成树 { int i, j, k, min; for (i=1; i=n; i++) //初始化两个数组 { lowcost[i] = cost[v0][i]; closest[i] = v0; } for (i=1; i=n-1; i++) //依次加入n-1条边 { min = INF; for (j=1; j=n; j++) //寻找离生成树最近的蓝色顶点k if ((lowcost[j]min) (lowcost[j] != 0)) { min = lowcost[j]; k = j; } wt += lowcost[k]; //累加总的权值 lowcost[k] = 0; //将顶点k加入生成树 for (j=1; j=n; j++) //更新蓝点集中的顶点到红点集的距离 if (cost[k][j] lowcost[j]) { lowcost[j] = cost[k][j]; closest[j] = k; } } } 思考:如果改用邻接表存储图,算法实现上要作怎样的改动? 如何输出生成树的各条边? 如果有多个1个的最近蓝点,算法会作怎样的选择?从而说明最小生成树是唯一的吗?最小生成树的权值是唯一的吗? 例:最优布线问题(bzoj1170) 问题描述:参见教材P97 例5-2 用Prim算法求解 例:繁忙的都市 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造。但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求: 改造的那些道路能够把所有的交叉路口直接或间接的连通起来。 在满足要求1的情况下,改造的道路尽量少。 在满足要求1、2的情况下,改造的那些道路中分值最大的道路分值尽量小。 任务:作为市规划局的你,应当作出最佳的决策,选择那些道路应当被修建。 输入文件:第一行有两个整数n,m表示城市有n个交叉路口,m条道路。接下来m行是对每条道路的描述,u, v, c表示交叉路口u和v之间有道路相

文档评论(0)

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

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

1亿VIP精品文档

相关文档