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

本文介绍了图的两种基本遍历方法:深度优先遍历和广度优先遍历。深度优先遍历采用递归方式,从起始顶点开始,尽可能深地搜索树的分支;而广度优先遍历则是采用队列的方式,按层次访问顶点。两种遍历方法均适用于有向图和无向图,并探讨了它们的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

2、广度优先遍历

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值