Алгоритм для нахождения числа различных путей в ориентированном графе

Возможный дубликат:
Алгоритм графика для поиска всех соединений между двумя произвольными вершинами

У меня есть ориентированный граф, какой алгоритм я могу использовать, чтобы найти количество различных ациклических путей между двумя конкретными вершинами и подсчитать максимальное время, когда любой путь используется в этих разных путях? Два пути различны, если они либо посещают разные числа вершин, либо посещают вершины в другом порядке.

Ответы

Ответ 1

Если вы следуете слегка модифицированному алгоритму Дейкстры, вы можете иметь решение для всех пар.

Объяснение: Пути от u до v - это сумма следующих значений:

  • Пути от u до v, которые не проходят через w
  • Пути, проходящие через w= количество путей от u до w раз количество путей от w до v

Инициализируйте матрицу нулями, кроме тех случаев, когда есть ребро от i до j (которое равно 1). Тогда следующий алгоритм даст вам результат (all-pair-path-count)

for i = 1 to n:
    for j = 1 to n:
        for k = 1 to n:
            paths[i][i] += paths[i][k] * paths[k][j]

Излишне говорить: O(n^3)

Желание прочитать одно парное решение.:)