码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-11-17 00:15:21      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:down   images   search   first   log   alt   job   实现   广度   

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

深度优先遍历

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

感想

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

参考

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

标签:down   images   search   first   log   alt   job   实现   广度   

原文地址:http://www.cnblogs.com/zsy20162301/p/7844051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!