У меня есть тип направленного ациклического c графа с некоторыми ограничениями.
- Существует только одна "входная" вершина
- Может быть несколько листовых вершин
- После разделения пути все, что находится под этим путем, не может попасть на другой путь (это станет яснее с некоторыми примерами ниже)
- Может быть любое количество «расщепленных» вершин. Они могут быть вложенными.
- «Разделенная» вершина может быть разбита на любое количество путей. В приведенных ниже примерах показаны только 2 пути для каждого, но их может быть больше.
Моя задача заключается в следующем: для каждой «разделенной» вершины (любой вершины, имеющей как минимум 2 исходящих ребра), найти вершины, где его пути воссоединяются - если такая вершина существует. Решение должно быть максимально эффективным.
Пример A:
пример a
В этом примере вершина A это вершина "расщепления", и ее "вершина переподключения" - это F.
Пример B:
пример b
Здесь есть две расщепленные вершины: A и E. Для обеих из них вершина G является вершиной переподключения.
Пример C:
пример c
Теперь есть три расщепленные вершины: A, D и E. Соответствующие вершины переподключения:
Пример D:
пример d
Здесь мы снова имеем три расщепленных вершины: A, D и E. Но на этот раз у вершины E нет вершины переподключения, потому что один из путей заканчивается рано.