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

图论算法介绍.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 1 2 3 4 5 6 1 2 3 4 5 6 1 -2 1 -4 1 -1 例 1 6 5 4 3 2 6 5 1 3 5 6 6 4 2 5 1 -5 1 -3 1 6 5 4 3 2 6 5 1 3 5 6 6 4 2 5 1 6 5 4 3 2 1 4 2 5 3 Prim 算法数据结构变化: 例题: 现有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为公路造价。在分析了这张图后可以发现,任一对城市都是连通的。现在的问题是,要用公路把所有城市联系起来,如何设计可使得工程的总造价最少。 输入: n (城市数,1≤n≤20) e (有向边数,1≤e≤210) 以下e行,每行为边(i,j)和该边的距离wij(1≤i,j≤n) 输出: n-1行,每行为两个城市的序号,表明这两个城市间建一条公共汽车线路。 具体算法框架: 法2、图的最小生成树:克鲁斯卡尔(Kruskal)算法 设最小生成树为T= (V, TE),设置边的集合TE的初始状态为空集; 将图G中的边按权值从小到大排好序; 重复进行下列的操作,直到TE中包含n-1条边为止: 对排好序的边从小考试依次选取, 若选取的边使生成树T不形成回路, 则把它并入到TE中, 保留作为T的一条边, 若选取的边使生成树形成回 路,则将其舍弃. ④ 得到最小生成树T=(S,TE); 例 1 6 5 4 3 2 6 5 1 3 5 6 6 4 2 5 1 3 1 1 6 4 3 1 2 1 6 5 4 3 2 1 2 3 1 6 5 4 3 2 1 4 2 5 3 难点: 如何判断欲加入的一条边是否与生成树中已保留的边形成回路?? 判断回路: 可以将顶点划分到不同的集合中,每个集合中的顶点表示一个无回路的连通分量, 很明显, 算法开始时, 把所有n个定点划分到n个集合中,每个集合只有一个顶点, 表明顶点之间互不相通, 当选取了一条边时, 若它的两个顶点分属于不同的集合,则不会产生回路, 因此这条边是应该保留的,且把它们合并为一个连通分量, 即把它的两个顶点所在集合合并成一个集合.如果选取的一条边的两个顶点属于同一个集合,则此边应该舍弃,因为同一个集合中的顶点是连通无回路的,若再加入一条边则必然产生回路. 具体算法框架: 有 向 (无向) 图 的 应 用: (一)、计算图的最短路径 在带权图G=(V, E)中, 若顶点Vi, Vj是图G的两个顶点, 从顶点Vi到Vj的路径长度定义为路径上各条边的权值之和. 从顶点Vi到Vj可能有很多条路径,其中路径长度最小的一条路径称为最短路径,求最短路径有很高的实用价值, 是图论中必须掌握的知识, 一般会出现两类最短路径问题: (1). 求从某个顶点到其他顶点(终点)的最短路径; (2). 求图中每一对顶点间的最短路径; 注意: 对于不带权的图, 只要人为的把每条边加上权值1,即可以当作带权图一样来处理了. (一). 从某个顶点到其余各顶点的最短路径 (Dijkstra算法) 【例题】设计公共汽车线路 现有一张县城的城镇地图,图中的顶点为城镇,无向边代表两个城镇间的连通关系,边上的权为公路造价,县城所在的城镇为v0。由于该县的经济比较落后,因此公路建设只能从县城开始规划。规划的要求是所有可达县城的城镇必须建设一条通往县城的汽车线路,该线路的工程的总造价必须最少。 输入: n (城市数,1≤n≤20),县城所在的城镇序号v0 e (有向边数1≤e≤210) 以下e行,每行为3个整数,两个城镇的序号和它们间的公路造价 输出: k行,每行为一条通往县城的汽车线路的总造价和该条线路途径的城镇序号 分析: 对于一个含有n个顶点和e条边的图来说, 从某一个顶点Vi到其余任一顶点Vj的最短路径, 可能是它们之间的边(Vi, Vj), 也可能是经过k个中间顶点和k+1条边所形成的路径(1=k=n-2), 6 5 4 3 2 1 9 4 4 2 4 3 2 4 8 6 设图G用邻接矩阵的方式存储在GA中, GA[i, j]=∞表示Vi, Vj是不关联的, 否则为权值(大于0的实数), 设集合S用来保存已求得最短路径的终点序号,初始时S=(Vi) 表示只有源点, 以后每求出一个终点Vj,就把它加入到集合中并作为新考虑的中间顶点. 设:数组dist[1..n] 用来存储当前求得的最短路径, 初始时Vi,Vj如果是关联的, 则dist[j]等于权值,否则等于∞,以后随着新考虑的中间顶点越来越多, dist[j]可能

文档评论(0)

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

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

1亿VIP精品文档

相关文档