图的遍历详细过程(深度优先/广度优先遍历)

所谓图的遍历,简单理解就是逐个访问图中的顶点,确保每个顶点都只访问一次。

 

图的遍历过程中,根据搜索方法的不同,又可以划分为两种搜索策略:

  1. 深度优先搜索(DFS,Depth First Search)
  2. 广度优先搜索(BFS,Breadth First Search)

 


深度优先搜索

 

算法思想

 

假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点, 然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图, 直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到, 则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

 

算法特点

深度优先搜索是递归过程,带有回退操作,因此需要使用栈存储访问的路径信息。

 

图解过程

1)

初始状态下,无向图中的所有顶点都是没有被访问过的,因此可以任选一个顶点出发,遍历整个无向图。

假设从 V1 顶点开始。

 

2)

紧邻 V1 的顶点有两个,分别是 V2 和 V3,它们都没有被访问过,从它们中任选一个,比如访问 V2。

 

3)

紧邻 V2 的顶点有三个,分别是 V1、V4 和 V5,尚未被访问的有 V4 和 V5,从它们中任选一个,比如访问 V4。

 

4)

紧邻 V4 的顶点有两个,分别是 V2 和 V8,只有 V8 尚未被访问,因此访问 V8。

 

5)

紧邻 V8 的顶点有两个,分别是 V4 和 V5,只有 V5 尚未被访问,因此访问 V5。

 

6)

和 V5 相邻的顶点有两个,分别是 V2 和 V8,它们都已经访问过了。也就是说,此时从 V5 出发,找不到任何未被访问的顶点了。

这种情况下,深度优先搜索算法会回退到之前的顶点,查看先前有没有漏掉的、尚未访问的顶点:

从 V5 回退到 V8,找不到尚未访问的顶点;

从 V8 回退到 V4,还是找不到尚未访问的顶点;

从 V4 回退到 V2,也还是找不到尚未访问的顶点;

从 V2 回退到 V1,发现 V3 还没有被访问。

于是,下一个要访问的顶点就是 V3。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值