判断无向图是否有回路(是否有环)

  • Post author:
  • Post category:其他


补充:



也适用于有向图的回路判断

,因为下面算法是基于邻接矩阵的。

总体思路:


(1)通过广度遍历(BFS)访问图的所有点,对于每个点,都检测和已访问过的点是否有边(除了和它连接的上层节点)。


(1.1)如果有边,说明有回路(有环)。如果对于每个点,都没有和已访问过的点有边,说明从该点出发的当前图没有回路(无环)。


(2)如果从任意点开始的BFS,以上操作(1)均说明无回路,则没有回路。

适用范围:


(1)判断图添加一条无向边后是否有回路。只要从这条新边的一个点出发执行操作(1)即可。


(2)判断一个图是否有回路。需要从任意点都执行一次操作(1),只有所有操作(1)均说明无回路,才表明没有回路。

举个例子:


假如有下面的一个图:


那么,假如从A点出发开始BFS


(1)那么就是A先被访问,然后通过A可以访问到B、C。


(2)当访问B时,此时只有A已访问,按照规则,需要判断B和其他已访问节点是否有边(除了和它连接的上层节点A)。此时已访问节点除了A,无其他已访问节点。那么继续下一个点。。