All shortest paths between a set of nodes
Consider a number of arbitrary nodes, A,B,C,D,E,F,…..
I wish to return all of the shortest paths between these nodes.
The nodes may have many edges between them, but anticipate a maximum of 4.
The graph is complex and non hierarchical (if this makes sense  any node may point to any other node).
A typical node has the form: match (n:Entity { name: 'xyz' })
How would I write the match expression to return the shortest paths between the above nodes, in no specific order?
Solution

Find the set of nodes using an indexed lookup operation

Collect them into a list

Unwind the list twice, once for every side of the path

Remove inverse pairs by id comparison

match and return the paths
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
Was this page helpful?