数据结构课件—图.ppt

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

算法实现策略首先,以顶点的成员变量visited来表示该顶点是否属于S,visited=true表示属于S,否则不属于S。其次,到达V-S中各个顶点的最短横切边通过该顶点的成员变量application来表示,此时application指向的是Edge类的对象,它是从S到达本顶点横切边中权值最小的一条。最后,最小生成树的表示采用设置图中边的类型来完成,即如果是最小生成树的边,将边的类型设置为Edge.MST。**求MST时,对v.application的操作**generateMST******Kruskal算法假设G=(V,E)是连通网,则令最小生成树的初始状态为只有|V|个顶点而无边的非连通图,图中每个顶点自成一个连通分量。在E中选择权值最小的边,若该边依附的顶点落在T中的不同连通分量上,则将此边加入T,否则舍去此边选择下一条代价最小的边。以此类推,直到所有顶点都在同一连通分量上为止。**Kruskal算法示例****最短距离

**最短距离在图中两点之间的最短路径问题包括两个方面:一是求图中一个顶点到其他顶点的最短路径;二是求图中每对顶点之间的最短路径。**单源最短路径在带权图G=(V,E)中,已知源点为s∈V,求s到其余各顶点的最短路径。在图中若顶点v是从源点s可达的,那么从s到顶点v的最短路径必然存在,其长度称为“从s到v的最短距离”,记作δ(s,v)。如果顶点v从s不可达,则可以认为从s到v的距离为∞。两点之间的最短路径可能不是唯一的。**最短路径的基本性质定理7.2若π=(u0=s,u1,u2,…,uk=v)是从顶点s到顶点v的最短路径,则对于任何0≤ij≤k,τ=(ui,ui+1,…,uj)是从顶点ui到uj的最短路径。**Dijkstra算法将带权图G=(V,E)的顶点分为两个集合:S、V-S,其中顶点集S是已求出的最短路径的终点集合(初始时S={s})。顶点集V-S是尚未求出最短路径的终点的集合。算法将按最短路径长度递增的顺序逐个将V-S中的顶点加入到S中,直到所有顶点都被加入到S中为止。**为每个顶点v定义了一个变量distance,该变量记录了从s出发,经由S中的顶点到达v的当前最短距离。长度最短的一条最短路径必为π=(s,uk),其中uk满足: distance(uk)=min{distance(ui)|ui∈V-S}将uk并入S,即S=S∪{uk}。每当一个新的顶点uk加入S之后,要以uk为“中转”顶点对V-S中各个顶点的当前最短路径distance进行修正。**图ADT实现结构**AbstractGraph抽象类实现的方法**DirectGraph和UndirectedGraph分别实现的方法**图的遍历**图的遍历图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次。两种方法:深度优先搜索广度优先搜索**深度优先搜索深度优先搜索(depthfirstsearch)从图中某个顶点发v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。**深度优先搜索**DFSTraverse****非递归实现DFS首先将初始顶点v入栈;当堆栈不为空时,重复以下处理栈顶元素出栈,若未访问,则访问之并设置访问标志,将其未曾访问的邻接点入栈;如果图中还有未曾访问的邻接点,选择一个重复以上过程。**DFS*广度优先搜索广度优先搜索(breadthfirstsearch)假设从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”先被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。****算法思想首先访问初始顶点v并入队;当队列不为空时,重复以下处理队首元素出队,访问其所有未曾访问的邻接点,并它们入队;如果图中还有未曾访问的邻接点,选择一个重复以上过程。**BFSTraverse****图的连通性

文档评论(0)

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

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

1亿VIP精品文档

相关文档