图的遍历之深度优先和广度优先

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的遍历之深度优先和广度优先相关的知识,希望对你有一定的参考价值。

图的遍历之深度优先和广度优先

深度优先遍历

  • 假设给定图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

感想

  • 在课堂上的时候没有完全消化老师所讲的内容,通过课后的学习将这两种遍历方法搞明白了。

参考

以上是关于图的遍历之深度优先和广度优先的主要内容,如果未能解决你的问题,请参考以下文章

图的遍历之深度优先搜索和广度优先搜索

图的深度/广度优先遍历C语言程序

图的广度遍历和深度遍历

什么是图的深度优先遍历?什么是图的广度优先遍历?

c语言图的遍历,邻接表存储,深度,广度优先遍历

图的遍历:深度优先遍历,广度优先遍历