void dfs(int u, int from) {
printf("%d -> %d\n", ~from ? e[from ^ 1] : -1, u);
ins[u] = true;
st[u] = true;
if (~from) fa[u] = e[from ^ 1];
for (int i = h[u]; ~i; i = ne[i]) {
if (i == (from ^ 1)) continue ;
int v = e[i];
if (!st[v]) {
dfs(v, i);
}
else if (ins[v]) {
int t = u;
while (t != v) {
printf("%d ", t);
t = fa[t];
}
printf("%d\n", v);
}
}
ins[u] = false;
}
4 6
1 2
2 4
4 3
3 1
2 5
5 3
输出:
-1 -> 1
1 -> 3
3 -> 5
5 -> 2
2 -> 4
4 2 5 3
2 5 3 1
上面的方法只能判环,不能找环,枚举不到1 2 4 3
这个环。