为什么深度优先搜索可以判定简单图中是否有环,而宽度优先搜索不行?

本文探讨了如何使用宽度优先搜索(BFS)和深度优先搜索(DFS)在简单图中检测环。对于无向图,BFS和DFS都能判断环的存在,而在有向图中,只有DFS能有效检测环。文中提供了DFS的伪代码实现,并指出在无环无向图的DFS过程中不会出现回边,而有环图的DFS路径会出现回边。

一,前言

本文是原创作品,可能有所不足,敬请指正,礼貌交流,感激不尽。

二,前提知识

1,简单图

简单图是指满足以下条件的图:没有连接顶点和其自身的边、不存在平行边。

2,环

这里我们讨论的是简单回路(环),也就是指除了第一个顶点和最后一个顶点相同以外、其他顶点不重复出现的回路。

3,树(单指无向树)的定义是连通无回路的无向图。

约定:

1,以下的“宽搜”二字代表宽度优先搜索,深搜代表深度优先搜索。

2,以下的图均指简单连通图

三,正文

1,首先可以肯定的是,对于无向图而言,宽搜和深搜都能判断是否有环。

简要说明一下,假如一个无向图有环,那么在宽搜的过程中,能搜到已经访问过的结点。如果一个无向图没有环(参考无向树),那么它的宽度优先搜索过程中,是不会访问到已访问过的结点的。

对于深搜,如果一个简单无向图有环,那么深搜的栈保存的结点形成的路径(以下简称深搜结点路径)会有回边(指向栈中结点的边)。但是没有环的话,就不会出现这种情况。

2,对于有向图而言,它们中只有深搜能判断是否有环。

首先对于有向图而言,无论有没有环,宽搜都有可能搜到已访问过的结点。如下图:

当结点B,C都进入了宽搜的队列,那么它们会先后访问D结点,这时就出现了访问已访问过的结点的情况。但是此时该图没有环。 

因此,之前的那个办法不能判断了。

但是深搜依然可以。如果简单有向图中存在环,深搜结点路径依然会出现回边。

四,写在最后

如有错误,敬请指正,礼貌交流,感激不尽

附录,有小伙伴提到了深搜判断无向图是否有环,我写了一下伪代码,

评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值