通过节点的最短路径

时间:2014-08-26 18:43:49

标签: neo4j cypher

如何获取两个节点之间的最小路径,其中路径通过特定节点。这是我到目前为止所得到的:

MATCH (a:User { username:"User1" }),(b:User { username:"User2" }),(c:User { username:"User3" }),
  p = allShortestPaths((a)-[*]-(b))
RETURN p 

我想要一个路径经过User3(c)的结果。

1 个答案:

答案 0 :(得分:1)

您可以分别找到每条腿:

MATCH (a:User {username:"User1"}),(b:User {username:"User2"}),(c:User {username:"User3"}),
  p = allShortestPaths((a)-[*]-(c)), q = allShortestPaths((c)-[*]-(b))
RETURN p, q

请注意,如果您有很长的路径或周期,此查询可能需要很长时间或永远不会完成。您应该考虑在路径长度上加上一个上限,例如:

MATCH (a:User {username:"User1"}),(b:User {username:"User2"}),(c:User {username:"User3"}),
  p = allShortestPaths((a)-[*..10]-(c)), q = allShortestPaths((c)-[*..10]-(b))
RETURN p, q