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"}] |