判环

有向图

判断环是否存在:

使用拓扑排序,如果n个点全部入队并出队,说明图是个DAG;如果没有完全入队,说明有环。因为有环的话,就会有点的入度一定不为0。

判断正/负环:

图的权值\(w \in (-\infty,0]\)或者\(w \in [0, +\infty)\)。可以对图求强连通分量(Tarjan),然后缩点。对于一个强连通分量,我们可以看其内部的边是否为全正/负,如果有正/负,说明存在正/负环。
图的权值\(w \in R\)。目前我只知道用SPFA。

无向图

判断是否有简单环

简单环的定义

如果点 \(u\)能够从一条不经过自己且不经过重复点的路径回到自己,那么这条路径就是一个简单环。

简单环判定:
  1. 使用Tarjan算法求边双连通分量,如果有点数大于等于3的,就说明存在环。
  2. 使用DFS/BFS求解,如果一个点能访问到已经访问过的点,那么有环。

方法2需要注意:不能经过重复边,不然会出错,详见这里

PS:貌似深搜不需要vis,但是加上还是个好习惯。

posted @ 2022-11-10 19:00  Zlc晨鑫  阅读(85)  评论(0)    收藏  举报