Определите циклы в графе (содержащем 2 узла, 3 узла ... n узлов), используя Cypher - PullRequest
0 голосов
/ 10 июля 2019

Я хотел бы определить все циклы на моем графике.Я хотел бы запрос, который даст мне циклы между 2 узлами, другой запрос, который даст мне циклы между 3 узлами ... до n узлов.

Я пробовал некоторые запросы, но я не знаю, как показать только циклы с 2 узлами, а затем только циклы с 3 узлами.Вместо этого я могу показать все циклы.

MATCH
  (m1:Disease)-[]->(m2:Disease),
  cyclePath=shortestPath((m2)-[*1..10]->(m1))
WITH
  m1, nodes(cyclePath) as cycle
WHERE id(m1) = apoc.coll.max([node in cycle | id(node)])
RETURN m1.id, cycle ;

Я ожидаю, что у меня будет больше запросов, которые дадут мне только циклы с 2 узлами, затем с 3 узлами ... n узлами (пока не будет определен максимальный цикл).).

1 Ответ

2 голосов
/ 12 июля 2019

Вот очень простой способ получить все циклы длины 2:

MATCH p=(m1:Disease)-[*2]->(m1)
RETURN NODES(p) AS cycle

Чтобы получить циклы другой длины, просто замените 2 в запросе на желаемую длину.

ПРИМЕЧАНИЕ. Этот запрос может возвращать один и тот же цикл узла несколько раз, но с другим начальным / конечным узлом. Например, 1 -> 2 -> 1 и 2 -> 1 -> 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...