图(3)——图的遍历与连通性

同树的遍历类似,对于给定的图,沿着一些边或弧访问图中所有的结点,且使每个结点仅被访问一次,这个过程叫做图的遍历。 图的遍历通常由两种方法:深度优先遍历和广度优先遍历。这两种方法对无向图和有向图都适用。

1、深度优先遍历 图的深度优先遍历基于深度优先搜索。 深度优先搜索是从图中某一顶点v出发,在访问顶点v后,再依次从v的任一还没有被访问的邻接顶点w出发进行深度优先搜索,直到图中所有与顶点v有路径相通的顶点都被访问过为止。 深度优先搜索可以用递归算法实现。

图的深度优先遍历的访问顺序与树的前序遍历顺序类似。若所要遍历的图是连通图,则通过一次深度优先搜索即可访问图中的所有顶点,若为非连通图,则需多次深度优先搜索。 深度优先搜索完成后,得到的图,其n-1条边链接了所有n个顶点,将该图称为深度优先搜索生成树。

《图(3)——图的遍历与连通性》 2、广度优先遍历

图的广度优先遍历基于广度优先搜索。 广度优先搜索是从图中某一顶点v出发,在访问顶点v后再访问v的各个未被访问过的顶点w1,w2,w3…wk,然后再依次访问w1,w2,w3…wk的所有未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有未被访问过的邻接顶点,如此下去,直到图中所有和顶点v有路径连通的顶点都被访问到为止。 广度优先搜索时一种分层的搜索过程,类似于树的层次遍历。同深度优先遍历一样,
若所要遍历的图是连通图,则通过一次广度优先搜索即可访问图中的所有顶点,若为非连通图,则需多次广度优先搜索。 广度优先搜索不是一个递归的过程,其算法也不是递归的。为了实现逐层访问,算法中使用了一个队列,以记录刚才访问过的上一层和本层顶点,以便于向下一层访问。 广度优先搜索后得到广度优先生成树。

《图(3)——图的遍历与连通性》 图的深度优先遍历算法和广度优先遍历算法的时间复杂度类似:
对于邻接矩阵表示,要在矩阵中扫描
n个顶点,要执 行一个双层循环,故时间复杂度为
O(n2)。 对于邻接表表示,
设图的边数为e,要扫描有
n 个分量的数组和单链表表示的
e条边,故时间复杂度为O(e+ n)


    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/betty__/article/details/80039252
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞