知识库

一组节点之间的所有最短路径

考虑任意数量的节点,A,B,C,D,E,F,…​..

我希望返回这些节点之间所有最短路径。节点之间可能有许多边,但预期最多有 4 条。图是复杂的且非层级的(如果这有意义的话 - 任何节点都可以指向任何其他节点)。典型节点的格式为:match (n:Entity { name: 'xyz' })

我如何编写匹配表达式来返回上述节点之间的最短路径,而不分特定顺序?

解决方案

  1. 使用索引查找操作查找节点集

  2. 将它们收集到列表中

  3. 将列表两次解构 (Unwind),路径的每一边一次

  4. 通过 ID 比较移除反向对

  5. 匹配并返回路径

MATCH (n:Entity) where n.name IN {names}
WITH collect(n) as nodes
UNWIND nodes as n
UNWIND nodes as m
WITH * WHERE id(n) < id(m)
MATCH path = allShortestPaths( (n)-[*..4]-(m) )
RETURN path
© . All rights reserved.