Algorithm 在有向图中找到至少有5条边的简单路径

Algorithm 在有向图中找到至少有5条边的简单路径,algorithm,graph,vertex,directed-graph,Algorithm,Graph,Vertex,Directed Graph,我有个问题。 给定一个有向图(G=V,E)和V群的源顶点s。 我们想检查从s到G中的任何顶点是否有一条至少有5条边的简单路径(没有圆)。 提供一个尽可能有效的算法来解决可能包含圆的图G的问题 求你了,我需要你的帮助 谢谢:-)我们需要找到从顶点s开始的任何5边简单有向路径。此路径将类似于: s -> a -> b -> c -> d -> e (all distinct) 现在让我们检查c(除了s之外的任何顶点)的所有可能值,然后对于每个c值,我们可以检查不包

我有个问题。 给定一个有向图(G=V,E)和V群的源顶点s。 我们想检查从s到G中的任何顶点是否有一条至少有5条边的简单路径(没有圆)。 提供一个尽可能有效的算法来解决可能包含圆的图G的问题

求你了,我需要你的帮助


谢谢:-)

我们需要找到从顶点
s
开始的任何5边简单有向路径。此路径将类似于:

s -> a -> b -> c -> d -> e   (all distinct)
现在让我们检查
c
(除了
s
之外的任何顶点)的所有可能值,然后对于每个
c
值,我们可以检查不包含
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)
求出顶点的度数。然后对于
AB
中的每个边
(a,b)
,我们需要检查

degree(a) + degree(b) = |DE| + x    
其中
x=1
如果
(a,b)
DE
中,否则
x=0
。如果这个等式不成立,这意味着
DE
中有一条边既不包含
a
也不包含
b
,我们可以遍历整个
DE
来找到答案


总的复杂度将是
O(|V|E|)
加上
O(|E|)
额外的内存。

我们需要找到从顶点
s
开始的任何5边简单有向路径。此路径将类似于:

s -> a -> b -> c -> d -> e   (all distinct)
现在让我们检查
c
(除了
s
之外的任何顶点)的所有可能值,然后对于每个
c
值,我们可以检查不包含
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)
求出顶点的度数。然后对于
AB
中的每个边
(a,b)
,我们需要检查

degree(a) + degree(b) = |DE| + x    
其中
x=1
如果
(a,b)
DE
中,否则
x=0
。如果这个等式不成立,这意味着
DE
中有一条边既不包含
a
也不包含
b
,我们可以遍历整个
DE
来找到答案


总的复杂性将是
O(|V | | E |)
加上
O(| E |)
额外的内存。

我已经用图G解决了同样的问题,它不能包含圆。带循环检测的Bellman-ford算法。对不起,我不理解你提到的内容@L@LuaiGhunim,Bellman Form检测长度为负的循环,不是任何循环。@DAle它也可以检测任何循环。我已经解决了图G中不能包含圆的相同问题。Bellman-ford算法与循环检测。对不起,我不理解你提到的内容@L@LuaiGhunim,Bellman窗体检测长度为负的周期,而不是任何周期。@DAle它也可以检测任何周期。