图的遍历和连通性 (2)幻灯片.ppt
《图的遍历和连通性 (2)幻灯片.ppt》由会员分享,可在线阅读,更多相关《图的遍历和连通性 (2)幻灯片.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图的遍历和连通性1第1页,共25页,编辑于2022年,星期五7.3 7.3 图的遍历图的遍历遍历:遍历:从已给的连通图中某一顶点出发,沿着一些边,访遍图从已给的连通图中某一顶点出发,沿着一些边,访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍图的遍图的遍图的遍历历历历,它是,它是,它是,它是图的图的基本运算。基本运算。遍历实质:遍历实质:找每个顶点的邻接点的过程。找每个顶点的邻接点的过程。图的特点:图的特点:图中可能存在图中可能存在回路,回路,且图的任一顶点都可能与其它且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些
2、边又顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点回到了曾经访问过的顶点。解决思路:解决思路:可设置一个可设置一个辅助数组辅助数组 visited n,用来标记每个,用来标记每个被访问过的顶点。它的初始状态为被访问过的顶点。它的初始状态为falsefalse,在图的遍历过,在图的遍历过程中,一旦某一个顶点程中,一旦某一个顶点i 被访问,就立即改被访问,就立即改 visited i为为truetrue,防止它被重复访问。,防止它被重复访问。怎样避免重复访问?2第2页,共25页,编辑于2022年,星期五深度优先搜索深度优先搜索和和广度优先搜索广度优先搜索 图常用的遍历:图常
3、用的遍历:一、深度优先搜索一、深度优先搜索(DFS)(DFS)Depth_First Search基本思想:基本思想:类似于树的先根遍历过程。类似于树的先根遍历过程。1、连通图的深度优先搜索遍历、连通图的深度优先搜索遍历步骤:步骤:访问起始点访问起始点 v;v;依次从依次从v v的未被访问的邻接点出发深度优先遍历图直至图的未被访问的邻接点出发深度优先遍历图直至图中所有和中所有和v v有路径相通的顶点都被访问到。有路径相通的顶点都被访问到。3第3页,共25页,编辑于2022年,星期五v1v1v2v3v8v7v6v4v5DFS DFS 结果:结果:例例例例1 1 1 1:v2v4v8v5v3v6v
4、7起点应退回到V8,因为V2已有标记void DFS(Graph G,int v)/从顶点从顶点v v出发,深度优先遍历出发,深度优先遍历G G visitedv=TRUE;VisitFunc(v);for(w=FirstAdjVex(G,v);w!=0;w=NextAdjVex(G,v,w)if(!visitedw)DFS(G,w);/对对v的尚未访问的邻接顶点的尚未访问的邻接顶点w递归调用递归调用DFS/DFS4第4页,共25页,编辑于2022年,星期五 对于无向图,这个算法可以对于无向图,这个算法可以遍历到遍历到v v顶点所在的连通分量顶点所在的连通分量中的所有顶点中的所有顶点,而与,而
5、与v v顶点不在一个连通分量中的所有顶顶点不在一个连通分量中的所有顶点遍历不到;点遍历不到;对于有向图可以对于有向图可以遍历到起始顶点遍历到起始顶点v v能够到达的所有顶点。能够到达的所有顶点。若希望遍历到图中的所有顶点,就需要在上述深度优先遍若希望遍历到图中的所有顶点,就需要在上述深度优先遍历算法的基础上,历算法的基础上,增加对每个顶点访问状态的检测。增加对每个顶点访问状态的检测。2、非连通图的深度优先搜索遍历、非连通图的深度优先搜索遍历步骤:步骤:访问起始点访问起始点 v v及图中所有和及图中所有和v v有路径相通的顶点。有路径相通的顶点。如果图中尚有顶点未被访问,则以该顶点为起始点,如果
6、图中尚有顶点未被访问,则以该顶点为起始点,进行深度优先搜索遍历。重复上述过程,直至所有顶进行深度优先搜索遍历。重复上述过程,直至所有顶点都已被访问。点都已被访问。5第5页,共25页,编辑于2022年,星期五abchdekfgF F F F F F F F FTTTTTTTTTachd kfe bgachkfedbg访问标志访问标志:访问次序访问次序:例例2:2:0 1 2 3 4 5 6 7 88123456706第6页,共25页,编辑于2022年,星期五void DFSTraverse(Graph G,Status(*Visit)(int v)/对图对图 G 作深度优先遍历作深度优先遍历。V
7、isitFunc=Visit;for(v=0;vG.vexnum;+v)visitedv=FALSE;/访问标志数组初始化访问标志数组初始化 for(v=0;vG.vexnum;+v)if(!visitedv)DFS(G,v);/对尚未访问的顶点调用对尚未访问的顶点调用DFS7第7页,共25页,编辑于2022年,星期五DFS DFS 算法效率分析算法效率分析算法效率分析算法效率分析:(设图中有设图中有设图中有设图中有 n 个顶点,个顶点,个顶点,个顶点,e e 条边条边条边条边)(1)如果用邻接矩阵来表示图,遍历图中每一个顶点都要)如果用邻接矩阵来表示图,遍历图中每一个顶点都要从头扫描该顶点所
8、在行,因此遍历全部顶点所需的时间从头扫描该顶点所在行,因此遍历全部顶点所需的时间为为O(n2)。(2)如果用邻接表来表示图,虽然有)如果用邻接表来表示图,虽然有 2e 个表结点,个表结点,但只需扫描但只需扫描 e 个结点即可完成遍历,加上访问个结点即可完成遍历,加上访问 n个头结个头结点的时间,因此遍历图的时间复杂度为点的时间,因此遍历图的时间复杂度为O(n+e)。结结 论:论:稠密图稠密图适于在邻接矩阵上进行深度优先遍历;适于在邻接矩阵上进行深度优先遍历;稀疏图稀疏图适于在邻接表上进行深度优先遍历。适于在邻接表上进行深度优先遍历。8第8页,共25页,编辑于2022年,星期五二、广度优先搜索二
9、、广度优先搜索(BFS)(BFS)基本思想:基本思想:仿树的层次遍历过程。仿树的层次遍历过程。Breadth_First Search在访问了起始点在访问了起始点v v之后,之后,依次访问依次访问 v v的各个未曾访问过的的各个未曾访问过的邻接点邻接点;然后按这些顶点被访问的然后按这些顶点被访问的先后次序先后次序依次访问它们的邻依次访问它们的邻接点,直至图中所有和接点,直至图中所有和V V有路径相通的顶点都被访问到。有路径相通的顶点都被访问到。若此时图中尚有顶点未被访问若此时图中尚有顶点未被访问,则则另选图中一个未曾被另选图中一个未曾被访问的顶点作起始点访问的顶点作起始点,重复上述过程,直至图
10、中所有,重复上述过程,直至图中所有顶点都被访问到为止。顶点都被访问到为止。步骤:步骤:9第9页,共25页,编辑于2022年,星期五v1v1v2v3v8v7v6v4v5BFS 结果:结果:例例1 1:v2v3v4v5v6v7v8v3 BFS BFS 结果:结果:结果:结果:v4 v5 起点起点v2 v1 v6v9 v8 v7例例例例2 2 2 2:10第10页,共25页,编辑于2022年,星期五讨论:讨论:答答:利用一个利用一个队列队列结构记录顶点访问顺序,将访问的每个顶结构记录顶点访问顺序,将访问的每个顶点入队,然后,再依次出队,出队时访问其邻接点并将邻接点点入队,然后,再依次出队,出队时访问
11、其邻接点并将邻接点入队。入队。(2 2)如何避免重复访问某个顶点?)如何避免重复访问某个顶点?(1 1)在广度优先遍历中,要求先被访问的顶点其邻接点也被)在广度优先遍历中,要求先被访问的顶点其邻接点也被优先访问,应采用何种方式记录顶点访问顺序?优先访问,应采用何种方式记录顶点访问顺序?答:创建一个答:创建一个一维数组一维数组visited0.n-1visited0.n-1(n n是图中顶点的数目)是图中顶点的数目),用来记录每个顶点是否已经被访问过。,用来记录每个顶点是否已经被访问过。(3 3)广度优先搜索有回退的情况吗?)广度优先搜索有回退的情况吗?11第11页,共25页,编辑于2022年,
12、星期五答:广度优先搜索是一种分层的搜索过程,每向前走一步答:广度优先搜索是一种分层的搜索过程,每向前走一步可能访问一批顶点,不像深度优先搜索那样有回退的情况。可能访问一批顶点,不像深度优先搜索那样有回退的情况。因此广度优先搜索不是一个递归的过程,其算法也不是递因此广度优先搜索不是一个递归的过程,其算法也不是递归的。归的。void BFSTraverse(Graph G,Status(*Visit)(int v)for(v=0;vG.vexnum;+v)visitedv=FALSE;/初始化访问标志初始化访问标志 InitQueue(Q);/置空的辅助队列置空的辅助队列Q for(v=0;vG.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图的遍历和连通性 2幻灯片 遍历 连通性 幻灯片
限制150内