关于找环

发布时间 2023-11-06 21:43:55作者: Zlc晨鑫
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这个环。