Поскольку это DAG, вы можете топологически отсортировать узлы в O (V + E) времени. Предположим, что исходной вершиной является S. Затем из S начинаем сначала обходить узлы по глубине. Когда мы обрабатываем узел U, допустим, что существует ребро U-> V, тогда V, конечно, еще не посещено (почему? Потому что это ориентированный ациклический граф). Таким образом, вы можете достичь от S до V через узел U в d [U ], где d [U] - количество путей от S до U.
Так много путей от S до любого узла V, d [V] = d [x1] + d [x2] + d [x3] ] +. , , + d [xy], где есть ребро, подобное x1-> V, x2-> V,. , , xy-> V
Этот алгоритм возьмет O (V + E), чтобы топологически отсортировать граф, а затем для вычисления количества путей не более O (V * E). Вы можете дополнительно сократить время выполнения вычисления количества путей до O (V + E), используя список смежности вместо матрицы смежности, и это наиболее эффективное решение до сих пор.
Ну, это первое, что я сделал, но это кажется слишком медленным. Вот почему я исследовал и нашел эту Топологическую Сортировку. –
Почему топологическая сортировка поможет вам с подсчетом путей? Он предназначен для преобразования не-DAG в DAG, а не для упрощения подсчета. – isaach1000
Потому что эта наивная рекурсия делает много избыточной работы над некоторыми DAG. Если вы помните, таблица заметок заканчивается построением в топологическом порядке. –