获得最短的圆圈路径而无需重复任何节点

问题描述

我需要一个查询,该查询将使我获得节点之间的最短圆周路径(因此,如果有多个路径,则返回最短的路径)。此外,这些路径不应包含重复的节点。例子:

enter image description here

在这种情况下,如果我将“项目B”作为输入传递,则应该收到路径“项目B->项目C->项目E->项目B”,因为其他路径是“项目B->项目C- >项目A->项目C->项目E-项目B”不仅更长,而且包含重复的节点(项目C)

使用同一张图片,如果我通过“ Item A”作为输入,则应该收到路径“ Item A-> Item C-> Item A”

此外,如果响应可以包含所有涉及的节点,而无需重复在所有情况下都相同的起始节点和最终节点,那就太好了。

谢谢!

解决方法

尝试类似的东西:

MATCH (n:Node{id:"a"})
MATCH p=(n)-[*..20]->(n)
WITH p,length(p) as len
ORDER by len ASC LIMIT 1
UNWIND nodes(p) as node
RETURN distinct node

不确定它的伸缩性如何,请注意,我添加了一个过滤器,用于检查距离仅20个跳或更少跳的路径。