我有一个问题。 给定有向图(G = V,E)和来自V组的源顶点s。 我们想检查从S到G中任何顶点是否有一条简单的路径(没有圆圈),至少有5条边。 提供尽可能高效的算法,以解决可能包含圆的图G的问题。
我需要你的帮助
谢谢: - )
答案 0 :(得分:0)
我们需要找到从顶点s
开始的任何5边简单有向路径。此路径如下所示:
s -> a -> b -> c -> d -> e (all distinct)
现在让我们浏览c
(除了s
之外的任何顶点)的所有可能值,然后对于每个c
值,我们可以遍历不包含{{1}的所有边}}和s
个顶点以及边c
执行以下操作:
(x, y)
这可以在if edge (s, x) exists and edge (y, c) exists
put (x, y) in AB edges list
if edge (c, x) exists
put (x, y) in DE edges list
中完成。然后我们需要找到一对边O(|E|)
,(E1, E2)
位于E1
,AB
位于E2
,并且它们不共享任何顶点共同。后者可以在DE
中完成。
我们可以采用图O(|E|)
并找到顶点的度数。然后,对于来自G' = (V, DE)
的每个边(a, b)
,我们需要检查
AB
degree(a) + degree(b) = |DE| + x
x = 1
(a, b)
位于DE
,否则为x = 0
。如果这种相等不成立,则意味着DE
中的边缘既不包含a
也不包含b
,我们可以遍历整个DE
来找到答案。
总体复杂性为O(|V||E|)
,O(|E|)
额外内存。