10.1.5 Кратчайший путь

10.1.5.1 Единственный кратчайший путь

Нахождение единственного кратчайшего пути между двумя узлами так же легко, как использование функции shortestPath. Это можно сделать, например, так:

Запрос

MATCH (martin:Person { name:"Martin Sheen" }),(oliver:Person { name:"Oliver Stone" }), 
  p = shortestPath((martin)-[*..15]-(oliver))
RETURN p

Это означает: найти единственный кратчайший путь между двумя узлами при условии, что длина пути не более 15 связей. Внутри скобок вы определяете единственную ссылку пути – начальный узел, соединяющую связь и конечный узел. Характеристики, описывающие связь, подобны типу связи, максимальное число переходов и направление – это всё, что используется при нахождения кратчайшего пути. Вы можете можете также отметить путь как необязательный.

Таблица 10.18 Результат

p
[Node[2]{name:"Martin Sheen"},:ACTED_IN[1]{},Node[4]{name:"WallStreet",title:"Wall Street"},:DIRECTED[5]{},Node[0]{name:"Oliver Stone"}]

10.1.5.2 Все кратчайшие пути

Найти все кратчайшие пути между двумя узлами.

Запрос

MATCH (martin:Person { name:"Martin Sheen" }),(michael:Person { name:"Michael Douglas" }),
  p = allShortestPaths((martin)-[*]-(michael))
RETURN p

находит два кратчайших пути между Мартином (Martin) и Майклом (Michael).

Таблица 10.19 Результат

p
[Node[2]{name:"Martin Sheen"},:ACTED_IN[3]{},Node[3]{name:"TheAmericanPresident",title:"The American President"},:ACTED_IN[4]{},Node[6]{name:"Michael Douglas"}]
[Node[2]{name:"Martin Sheen"},:ACTED_IN[1]{},Node[4]{name:"WallStreet",title:"Wall Street"},:ACTED_IN[2]{},Node[6]{name:"MichaelDouglas"}]

Предыдущая | Следующая