Я считаю, что проверка вершины V, такой, что средняя степень соседства V равна нулю, должна быть хорошей отправной точкой для вашего вопроса.
Если средняя степень соседства V равна нулю, тонет пути между любыми соседями V друг к другу.Поскольку как преемник S, так и предшественник P имеют значение V, считаются его соседями в функции ниже, путь между P и S будет содержать V.
NB: Это НЕ ГАРАНТИРУЕТ УНИКАЛЬНОСТЬ V, то есть путьмежду P и S может быть какой-то другой узел U. Это нормально для вас?Мой ответ работает, если узлы-преемники не могут быть связаны с другими узлами-преемниками V, и аналогично, узлы-предшественники не могут быть связаны с другими предшественниками V.
Также под преемниками и предшественниками вы подразумеваете НЕМЕДЛЕННЫЕ преемники / предшественники?Я не уверен, что мой метод будет работать для не немедленных, но если для непосредственного без связей между ними, средняя степень соседа должна работать.
Поскольку вы упомянули DAG, у вас уже будут данные Directed Graph.структура, следовательно, средняя степень соседа для этой структуры данных должна быть в порядке.
NetworkX - это библиотека, с которой мне удобнее всего работать, поэтому эту функцию я бы использовал:
https://networkx.github.io/documentation/networkx-1.5/reference/generated/networkx.algorithms.neighbor_degree.average_neighbor_degree.html#networkx.algorithms.neighbor_degree.average_neighbor_degree
Вышеприведенная функция позволяет вам указать узлы на графике, которые вы хотите проанализировать.Так что кормите его узлом V и всеми узлами S и P.Он должен возвращать среднюю степень соседа для всех узлов.Из dict извлеките значение для узла V и проверьте, равен ли он нулю
Было бы трудно помочь вам в дальнейшем без некоторого кода или образца структуры данных с вашей стороны.Я могу обновить этот ответ с помощью некоторого кода NetworkX, если вы можете предоставить мне начальный код