Gremlin 查询以检查边只访问一次的图中是否存在循环

Gremlin 查询以检查边只访问一次的图中是否存在循环,gremlin,graphic,tinkerpop,Gremlin,Graphic,Tinkerpop,如何编写在我的图形上运行的查询,如果没有路径只通过每条边一次并返回到起点,则该查询将输出“false”。我使用了以下方法: 以下查询返回第一个可能的路径: gremlin> g.V().sideEffect(outE("bridge").aggregate("bridges")).barrier(). ......1> repeat(bothE().or(__.not(select('e')), ......2> __.not(fil

如何编写在我的图形上运行的查询,如果没有路径只通过每条边一次并返回到起点,则该查询将输出“false”。

我使用了以下方法:

以下查询返回第一个可能的路径:

gremlin> g.V().sideEffect(outE("bridge").aggregate("bridges")).barrier().
......1>   repeat(bothE().or(__.not(select('e')),
......2>                     __.not(filter(__.as('x').select(all, 'e').unfold().where(eq('x'))))).as('e').otherV()).
......3>     until(select(all, 'e').count(local).as("c").select("bridges").count(local).where(eq("c"))).limit(1).
......4>   path().by(id).by(constant(" -> ")).map {String.join("", it.get().objects())}
==>orange -> blue -> white -> orange -> red -> white -> red -> orange -> blue
如果您只需要一个布尔值,那么只需附加
.hasNext()


这归结为在所有顶点上循环,如果两个()的总数都为0或2,则返回true。count()%2==0。我仍然在用线来表达这一点。耶。遍历是最棘手的部分。我还在努力。
gremlin> g.V().sideEffect(outE("bridge").aggregate("bridges")).barrier().
......1>   repeat(bothE().or(__.not(select('e')),
......2>                     __.not(filter(__.as('x').select(all, 'e').unfold().where(eq('x'))))).as('e').otherV()).
......3>     until(select(all, 'e').count(local).as("c").select("bridges").count(local).where(eq("c"))).limit(1).
......4>   path().by(id).by(constant(" -> ")).map {String.join("", it.get().objects())}
==>orange -> blue -> white -> orange -> red -> white -> red -> orange -> blue
g.V().sideEffect(outE("bridge").aggregate("bridges")).barrier().
  repeat(bothE().or(__.not(select('e')),
                    __.not(filter(__.as('x').select(all, 'e').unfold().where(eq('x'))))).as('e').otherV()).
    until(select(all, 'e').count(local).as("c").select("bridges").count(local).where(eq("c"))).hasNext()