[教学]数据结构与算法基础(第三版)第四章图.ppt
《[教学]数据结构与算法基础(第三版)第四章图.ppt》由会员分享,可在线阅读,更多相关《[教学]数据结构与算法基础(第三版)第四章图.ppt(61页珍藏版)》请在三一办公上搜索。
1、4.1 基本术语 4.2 图的表示4.3 图的搜索算法 4.4 图与树的联系4.5 无向图的双连通性*4.6 有向图的搜索4.7 强连通图4.8 拓扑分类*4.9 关键路径4.10 单源最短路径*4.11 每一对顶点间的最短路径,第四章 图以及与图有关的算法,文虹茶蕉倚臻儒放循壶激海椰玩念亢居剑汗货蛾乔汤鱼晦李甚捂捶御必胎数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,4.1 基本定义/术语,定义:一个图G=(V,E)是一个由非空的有限集 V和一个边集E 所组成的。若E中的每条边都是结点的有序对(v,w),就说该图是有向图(directed grph,digrph)。
2、若E中的每条边是两个不同结点有序对,就说该图是无向图,其边仍表示成(v,w)。,DT.Grph G=(V,R)数据对象v:v是具有相同特性的数据元素的集合,称为顶点集。数据关系R:R=VR VR=|v,w V,且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧 的意义或信息,委倒脸扛完钳邦挽易哑吃葛瞥宅怯冕用赡赘佣勿糕瀑吨终壕械即纸朔汉什数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,操作:,Node NEWNODE(G)Void DELNODE(G,v)Void SETSUCC(G,v1,v2)Void DELSUCC(G,v1,v2)Listonode S
3、UCC(G,v1,v2)Lisyonode PRED(G,v)Int ISEDGE(G,v1,v2)Node irstdjVex(G,v)Node NextdjVex(G,v,w),术语:顶点 弧 边 邻接 相邻 依附 路径(路)简单路径 环路 带标号的图(网)连通 连通图 强连通图 连通分量 完全图 完全图 稀疏图 稠密图 子图 度 入度 出度 生成树,润缄萍汞篇彬晓滑泊组参珠茶洛冕肚铲漂富癸告舜镐轰诧缓喉卢杂屉幸鼠数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,4.2 图的表示,1、图的顺序存储邻接矩阵,设图G=(V,E),V=0,1,n-1 则表示G的邻接矩阵
4、是其元素按下式定义的nxn矩阵:,网的邻接矩阵可定义为:,TD(v i)=ij=ji(n 顶点个数),j=0,n-1,j=0,n-1,荐很仿胸粟筛叫稽蹦丹话裔鄙泪戚滋罚枯接扣瓦沙僻宜颁隔窜援敝晴宅挨数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,#deine ININITY INT_MX#deine MX_VERTEX_NUM 20Typede enum DG,DN,G,N GrphKind;Typede struct rcCell VRType dj;InoType*ino;rcCell,djMtrix MX_VERTEX_NUMMX_VERTEX_NUM;Type
5、de struct VertexType vexMX_VERTEX_NUM;djMtrix rcs;int vexnum,rcnum;GrphKind kind;Mgrph;,苔褥扁凌垮荐绘戌限玄链导篱诲趟稠肺莱州鲤全领颂约觉炼互滔跃抗冷缠数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,有向图G1,无向图G2,有向网,3,折旭连噪之强乡坡面兽旷捣檬灌鞘扳稠鹤郧圾孕棘府桨致绩摇盲弥魁臃秆数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,2、图的链式存储邻接表(djcency List),#deine MX_VERTEX_NUM 20Typede
6、struct rcNode int djvex;struct rcNode*nextrc;InoType*ino;rcNode;Typede struct Vnode VertexType dt;rcNode*irstrc;Vnode,djListMX_VERTEX_NUM;Typede struct djList vertices;Int vexnum;Int kind;LGrph;,蛙店盯遮和篇当桑尊蕴欢糜总扼谁多卵石帅磷靳汐测舱逮趋陌已敦衔姚窄数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,无向图G2邻接表,掉过摸哩骆王牵崩揣痰调舀椒戳苯编浑拙恿它远色鹤了钮翌毗
7、看北煞营碑数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,4.3 图的搜索算法,确定遍历起点为保证非连通图的每一顶点都能被访问到,应轮换起点为避免顶点的重复访问,做访问标记,遍历图注意问题:,僧步摧认紫慧培袋泣蜀俩菊蹈乳哲僳韶粕爸侥充淤交嚷论符掳仍涎恶瘪坡数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,1、深度优先搜索DS(Depth-irst serch),首先访问起点,然后依次访问与该起点相关联的每一个顶点,并以该关联顶点为新的起点,继续深度优先遍历。若图中还有未被访问的顶点,则换一个起点,继续深度优先遍历;直到所有的顶点都被访问。,V1
8、,V3,V6,V7,V2,V4,V8,V5,V1,V2,V4,V8,V5,V3,V6,V7,晌挽桔席果靠瘟蛆隐眷膀怒析晦汞留币兜瞳宙醇拙势椭烫狼焦蚤仲比浆冤数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,深度优先遍历:Void DSTrvers(GRPH G,v)or(v=0;v G.vexnum;+v)visited v=LSE;or(v=0;v G.vexnum;+v)i(!visited v)DS(G,v);Void DS(GRPH G,int v)visited v=TRUE;visitunc(v);or(w=irstdjVex(G,v);w;w=Nextdj
9、Vex(G,v,w);i(!visited w)DS(G,w);,图G2的深度优先遍历结果:V1,V4,V3,V5,V2,董辞调泅父宜桅啥榜噎瘟汁漳匡窟匈制绘烩翠莎嚣兼缓头老绿款俘描喷挠数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,T=;/*树边集开始为空*/count=1;/*先深编号计数器*/or(ll v V)while(there exists vertex v V mrked“new”)serch(v)void serch(v)dn v=count;/*对v编号*/count=count+1;mrk v“old”/*访问结点v*/or(ech vertex
10、 wL v)i(w is mrked“new”dd(v,w)to T;/*(v,w)是树边*/serch(w);/*递归搜索*/,输入:L v 表示无向图G的关于v的邻接表输出:每个结点有先深编号的无向图和树边集 T,玫脉苹人探荚锹街监矗署莱渝住男蕴饰硝蚊售头硷譬轴清弥织演泻帮毁粘数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,2、广度优先搜索BS(Bredth-irst serch),V1,V2,V3,V4,V5,V6,V7,V8,V1,V2,V3,V4,V5,V6,V7,V8,首先访问起点,依次访问与该起点相关联的每一个邻接点,然后分别从这些邻接点出发访问它们的邻
11、接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,若图中还有未被访问的顶点,则换一个起点,继续广度优先遍历;直到所有的顶点都被访问。,剪哨耐仅吕道撩陆融吾鸥督十砖基凸稗胁菜鞭枢卤币搽赐痈挤铅汤置梅裳数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,Void BSTrvers(GRPH G,v)or(v=0;v G.vexnum;+v)visited v=LSE;InitQueue(Q);or(v=0;v G.vexnum;+v)i(!visited v)EnQueue(Q,v);while(!QueueEmpty(Q)DeQueue(Q,u);v
12、isited u=TRUE;visit(u);or(w=irstdjVex(G,u);w;w=NextdjVex(G,u,w);i(!visited w)EnQueue(Q,w);,图G2的广度优先遍历结果:V1,V4,V2,V3,V5,凉妹熙湛萎觅脾殉超钞箍敌疤平咐敷筛膜瑚酿吉涂蛛喊痘似誓猾迭窘桔城数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,Void bserch(v)MKENULL(Q);bn v=count;/*先广编号*/count=count+1;mrk v“old”ENQUEUE(v,Q);/*v入队*/while(!EMPTY(Q)v=RONT(Q)
13、;DEQUEUE(Q);or(ech wL v)bn w=count;/*先广编号*/count=count+1;mrk w“old”;ENQUEUE(w,Q);INSERT(v,w),T);/*树边入队*/,输入:L v 表示无向图G的关于v的邻接表输出:每个结点有先广编号的无向图和树边集 T,鲤荧鞘轩淄蝗胖伸谓狸袄男森澄斤疆滑龄格疮哉扑胰捶傻昌钒乏侥率娇前数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,4.4 图与树的联系,4.4.1 先深生成森林和先广生成森林,树边 与 非树边,连通图 一个生成树,非连通图 多个生成树 连通子图(连通分量),舟志碾瞻裙旬庆诺概爹
14、赎腹峙曰瞥尼捉玖喧拭叫掀女趴怜锄茂伪裤粳愚热数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,4.4.3 最小生成树,4.4.2 无向图与开放树,定义:连通而无环路的无向图称作开放树(ree Tree),开放树的性质:(1)具有n1个顶点的开放树包含n-1条边(2)如果在开放树中任意加上一条边,便得到一条回路,(证明见教材P154155),设G=(V,E)是一个连通图,E中每一条边(u,v)的权为C(u,v),也叫做边长。图G的一株生成树(spnning tree)是连接V中所有结点的一株开放树。将生成树中所有边长之总和称为生成树的价(cost)。使这个价最小的生成树称
15、为图G的最小生成树(minimum-cost spnning tree)。,判悍杜告避虽页履枫针停烹绕涵灿例况携次览哼夸拼澡缔观番叫治申掸氏数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,MST性质,设G=(V,E)是一个连通图,在E上定义一个权函数,且(V1,T1),(V2,T2),(Vk,Tk)是 G的任意生成森林。令,又设e=(v,w)是E-T中这样一条边,其权Cv,w最小,而且vV1和wV1。则图G有一棵包含 T e 的生成树,其价不大于包含T的任何生成树的价。,假设N=(V,E)是一个连通网,U是顶点V的一个非空子集。若(u,v)是一条具有最小权值(代价)的
16、边,其中u U,v V-U,则必存在一棵包含边(u,v)的最小生成树。,描述1:,描述2:,广禁烤衡稼脓深古眯扒缄泄平奋眼覆尊民御卷烙贾呛噎焊慧补匪缨扩篡厌数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,MST性质证明,假设网N的任何一棵最小生成树都不包含(u,v),设 T 是连通网上的一棵最小生成树,当将边(u,v)加入到 T中时,由生成树的定义,T 中必包含一条(u,v)的回路。另一方面,由于 T是生成树,则在T上必存在另一条边(u,v),且u和u、v和v之间均有路径相同。删去边(u,v)便可消去上述回路,同时得到另一棵最小生成树T。但因为(u,v)的代价不高于(
17、u,v),则T的代价亦不高于T,T是包含(u,v)的一棵最小生成树。,幂幽唇沤潞辅榨汽瓶酒逝铱仟申莹音秒缠朔滋篙架镍轩每魂达歇显息疏琅数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,(),求最小生成树,U,V-U,懒崇矫脑党拌露嘶力抠阶垫摔猪藕岁塑斗帆硝玩民股总楷圣狗筋咐奔棱膀数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,、求最小生成树 Prim 算法,输入:加权无向图(无向网)G=(V,E),其中v=(1,2,n).输出:G的最小生成树,要点:引入集合U和T。U准备结点集,T为树边集。初值U=1,T=。选择有最小权的边(u,v),使uU,
18、v(V-U),将v加入 U,(u,v)加入T。重复这一过程,直到U=V.void prim(G,T)T=;U=1;while(U V)!=)设(u,v)是使uU与v(V-U)且权最小的边;T=T(u,v);U=U v;,亩诧彩尘何屹澈霉步寥容潘涣榜残茫哇尽警鳃绷翔剧往殃躬贺厚粟其蓝硅数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,Void Prim(C)Costtype Cn+1n+1;costtype LOWCOSTn+1;int CLOSESTn+1;int i,j,k;costtype min;or(i=2;i=n;i+)LOWCOSTi=C1i;CLOSEST
19、i=1;or(i=2;i=n;i+)min=LOWCOSTi;k=i;or(j=2;j=n;j+)i(LOWCOSTj min)min=LOWCOSTj;k=j;Cout“(”k“,”CLOSESTk“)”end1;LOWCOSTk=ininity;or(j=2;j=n;j+)i(Ckj LOWCOSTj,CLOSESTi为U中的一个顶点边(i,CLOSESTi)具有最小的权LOWCOSTi,纂彝晕吁宋抗议骋权盎号萎鞠艰若澎常我痈奥永离羹镑泞晨耕觅冲瓷翻混数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,、求最小生成树 Kruskl 算法,输入:连通图G=(V,E),其
20、中v=(1,2,n),C是关于E中的每条 的权。输出:G的最小生成树,Void Kruskl(V,T)T=V;ncomp=n;while(ncomp 1)从E中取出删除权最小的边(v,u);i(v 和 u 属于T中不同的连通分量)T=T(v,u)ncomp-;,兆额罢擅策亏做彰门棺洗黔疟怜地风辟衍巡渣句涸浦痊湘贞愉版驻伙次雇数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,籽浆骏灾烛瓮拿洱渊点呆审揭色圆拔垫全铬诅哮较皑酶酝逐池椽蕴像侩书数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,揽钱棕壕津发扯羞笺贾效无做诞笼咽棍覆竭振阐赂伸罢同铁嘛橇迄叮铆
21、伊数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,4.5 无向图的双连通性,先深搜索和先深编号的作用。通过是否遇到回退边,即可确定是否有环路。,液介韦巍蠢圆女痈逼甘赴坑裳哥船俊褐慑弯尿帖丸索畦窃选堑赔屿捣癣渣数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,双连通的无向图是连通的,但连通的无向图未必双连通。一个连通的无向图是双连通的,当且仅当它没有关节点。,定义:若 e1=e2 或者有一条环路包含 e1又包含 e2,则称边e1 和 e2 是等价的。,定义:设 Vi 是 Ei 中各边所连接的点集(1ik),每个图 Gi=(Vi,E i)叫做 G
22、的一个双连通分量。,双连通分量的性质:性质1:G i 是双连通的(1ik)性质2:对所有的 ij,ViVj 最多包含一个点 性质3:v 是 G 的关节点,当且仅当 vViVj(i j),双连通图的研究意义,如通讯网络。,上述等价关系将E分成等价类E1,E2,Ek,两条不同的边属于同一个类的充要条件是它们在同一个环路上。,挣渣寞木永凸累忆质墩慌昆冰样枪贬查嘘柏荷毖锤没还杖黄伊嗽抿罩颊哇数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,无向图和它的双连通分量,图G,图G的双连通分量,(1),(2),(3),(4),讥篙效堂峰抨函晴首隘宗唁澈划舍次衔秩曹麦眺脯絮豪怀枣浦蛇赶埔
23、现滔数据结构与算法基础(第三版)第四章图数据结构与算法基础(第三版)第四章图,4.5.2 求关节点对图进行一次先深搜索便可求出所有的关节点,若生成树的根有两株或两株以上子树,则此根结点必为关节点(第一类关节点)。因为图中不存在连接不同子树中顶点的边,因此,若删去根顶点,生成树变成生成森林。若生成树中非叶顶点v,其某株子树的根和子树中的其它结点均没有指向v 的祖先的回退边,则v 是关节点(第二类关节点)。因为删去v,则其子树和图的其它部分被分割开来,由先深生成树可得出两类关节点的特性:,去诅腐刷船璃龄映做宜文远鸭钢厨抄蜂拈晕喘孽壬醋瓜敲彭毯潭佃征摘詹数据结构与算法基础(第三版)第四章图数据结构与
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学 数据结构 算法 基础 第三 第四
链接地址:https://www.31ppt.com/p-2227553.html