图的遍历之深度优先和广度优先
深度优先遍历
- 假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。
- 图的深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-First Search)。相应地,用此方法遍历图就很自然地称之为图的深度优先遍历。
- 基本实现思想:
- (1)访问顶点v;
- (2)从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历;
- (3)重复上述两步,直至图中所有和v有路径相通的顶点都被访问到。
- 深度优先的顺序:
- 以A为顶点:ABCE-D
- 以B为顶点:BCE-D-A
- 以C为顶点:CE-BD-A
- 以D为顶点:DCE-AB
- 以E为顶点:E-ABC-D
广度优先遍历
- 图的广度优先遍历BFS算法是一个分层搜索的过程,和树的层序遍历算法类同,它也需要一个队列以保持遍历过的顶点顺序,以便按出队的顺序再去访问这些顶点的邻接顶点。
- 基本思想:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。
- 广度优先的顺序:
- 以A为顶点:ABDEC
- 以B为顶点:BCDAE
- 以C为顶点:CEABD
- 以D为顶点:DCEAB
- 以E为顶点:EABDC
感想
- 在课堂上的时候没有完全消化老师所讲的内容,通过课后的学习将这两种遍历方法搞明白了。
参考
时间: 2024-11-10 13:25:01