《图基本算法》PPT课件.ppt
《《图基本算法》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《图基本算法》PPT课件.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图的基本算法的基本算法 目目录1.图的基本概念2.最小生成树算法3.最短路问题4.拓扑排序5.浅析SPFA的优化 栈栈6.时间允许的情况下,讲tarjan算法 图的基本概念的基本概念图:二元组 称为图(graph)。V V为结点(node)点(vertex)集。E E为图中结点之间的边的集合。简单图环:端点重合为一点的边。重边:两条边连接同一对顶点。简单图:没有环和重边的图。无向图和有向图如果边都是双向的,则这个图叫做无向图。如果边都是单向的,则这个图叫做有向图。图的基本概念的基本概念子图:连通性无向图中,如果两个顶点之间存在一条路经,就称这两个顶点是连通的。有向图中,如果两个顶点之间相互都存
2、在一条路,则称它们是强连通的。如果一个图的任意两个顶点都是连通的,就称这个图是连通的。顶点的度无向图中,一个顶点相连的边数称为该顶点的度。有向图中,从一个顶点出发的边数称为该顶点得出度;到达该顶点的边数称为它的入度。顶点的最大度数称为图的度数。路和回路一个连接两个顶点的,顶点与边交替的序列称为路。除了起始与终止顶点,其他顶点都不相同,这样的路称为简单路径。起始与终止顶点相同的简单路径称为圈。图的基本概念的基本概念 完全图、稠密图和稀疏图任何两个顶点之间都有边(弧)相连称为完全图边(弧)很少的图称为稀疏图反之为稠密图图的表示方法的表示方法邻接矩阵邻接表邻接矩接矩阵邻接表接表邻接表表示法常用于稀疏
3、图需要记录的信息:结点首指针,边的权值和下一条边的指针邻接表的接表的实现 Struct Edgeint vertex;/记录结点编号int val;/边的权值Edge*next;/记录链表的下一个元素;Edge*edge=new Edgen;for(int i=0;iuvw)/(u,v)表示一条边,w表示权值L=new Edge;L-vertex=v;L-val=w;L-next=edgeu;edgeu=L;/将(u,v)插入到以u起点的链表中 遍历与u相邻的节点:L=edgeu;while(L!=NULL).L=L-next;最小生成最小生成树问题生成树:由G的n-1条边构成的无环的子图,这
4、些边的集合成为生成树。最小生成树:所有生成树中权值最小的一个边集T为最小生成树,确定树T的问题成为最小生成树问题。prim算法kruskal算法prim算法的基本思想算法的基本思想任取一个顶点加入生成树;在那些一个端点在生成树里,另一个端点不在生成树里的边中,取权最小的边,将它和另一个端点加进生成树。重复上一步骤,直到所有的顶点都进入了生成树为止。int prim(int s)/s为初始加入的点int i,j,sum=0;for(i=1;i=n;i+)closesti=10000000;for(i=1;i=n;i+)closesti=mapsi;closests=0;int now;for(i
5、=1;in;i+)int min=INT_MAX;for(j=1;j=n;j+)if(closestj&closestjmin)min=closestj;now=j;sum+=min;closestnow=0;for(j=1;j=n;j+)if(mapnowj&mapnowj ranky2 then py x3 else px y4 if rankx=ranky5 then ranky ranky+1The FIND-SET procedure with path compression is quite simple.FIND-SET(x)1 if x px2 then px FIND-SE
6、T(px)3 return pxMST-KRUSKAL(G,w)1.A2.for 每个结点vVG3.do MAKE-SET(v)4.根据权w的非递减顺序对E的边进行排序5.for 每条边(u,v)E,按权的非递减次序6.do if FIND-SET(u)FIND-SET(v)7.then AA(u,v)8.UNION(u,v)9.return A复杂度E*logE例例题 POJ3522题目大意:给出一个由n个点m条边构成的无向图,找出一棵生成树,使得这个生成树上的最大边与最小边权值之差最小思路:思路:用Kruskal!由于kruskal算法是将边排序后从最小权值边开始不断地加入不形成环的边,我
7、们可以由小到大枚举每次形成的生成树中的最小边来求的若干棵生成树。每次更新一下差值。求得最优解。练习 Prim POJ 1258 POJ 2485 Kruskal POJ1861最短路最短路问题单源最短路径bellman-ford算法 spfa算法 dijkstra算法每对顶点的最短路径 floyd-washall算法 单源最短路径源最短路径已知图G=(V,E),我们希望找出从某给定源顶点sV到每个顶点vV的最短路径。在单源最短路径问题的某些实例中,可能存在着权值为负的边,如果图不包含从s可达的负权回路,则对所有的vV,最短路径的权的定义依然正确。如果存在一条从s可达的负权回路,则最短路径的定义
8、就不成立了。易知,一条最短路径不能包含回路。松弛技松弛技术bellman-ford,spfa,dijkstra算法都使用了松弛技术,对每个顶点vV,都设置一个属性dv,用来描述从源点s到v的最短路径上权值的上界。伪代码:初始化:Init(G,s)for each vertex vVG do dv=;ds=0;松弛:Relax(u,v,w)if(dvdu+w(u,v)dv=du+w(u,v)Bellman-Ford算法算法Bellman-Ford(G,w,s)Init(G,s)For i 1 to|VG|-1 Do For 每条边(u,v)EG Do Relax(u,v,w)For每条边(u,v
9、)EG Do If dv du+w(u,v)Then Return FALSEReturn TRUE/时间复杂度为O(V*E);Bellman-Ford算法能在一般的情况(存在负边权的情况)下解决单源最短路径问题,对于给定的带权有向图G=(V,E),其源点为s,对该图运行Bellman-Ford算法后可以返回一个bool值表明图中是否存在着一个从源点可达的权为负的回路,若存在这样的回路的话,算法说明该问题无解,若不存在这样的回路,算法将产生最短路径及其权值。对bellman-ford算法的说明:如果没有负权回路,运行一次bellmanford算法,将得到源点到任意点的最短路:由于源点到任意一点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图基本算法 基本 算法 PPT 课件
限制150内