Мне нужно разработать алгоритм O (| V | + | E |), связанный с топологическим типом, который в направленном ациклическом графе (DAG) определяет количество путей из каждая вершина графа к t (t - узел с внешней степенью 0). Я разработал модификацию ДФСА следующим образом:Топологическая сортировка, чтобы найти количество путей к t
DFS(G,t):
for each vertex u ∈ V do
color(u) = WHITE
paths_to_t(u) = 0
for each vertex u ∈ V do
if color(u) == WHITE then
DFS-Visit(u,t)
DFS-Visit(u,t):
color(u) = GREY
for each v ∈ neighbors(u) do
if v == t then
paths_to_t(u) = paths_to_t(u) + 1
else then
if color(v) == WHITE then
DFS-Visit(v)
paths_to_t(u) = paths_to_t(u) + paths_to_t(v)
color(u) = BLACK
Но я не уверен, что этот алгоритм связан с топологической сортировкой, или если я должен перестроить свою работу с другой точкой зрения.
Я полагаю, ваш граф является DAG (в противном случае нет никакого смысла говорить о топологической сортировке, ни о количестве путей, там может быть бесконечным число тех) – amit
@amit Да, Я поставил вопрос «направленный ациклический граф». Я отредактировал, чтобы добавить аббревиатуру «DAG» – Stratford
Ваше эго верно, вы найдете количество способов t. И вы делаете это топологически правильным образом: как только вершина u окрашена в черный цвет, значение path_to_t (u) правильное - это соответствует нажатию вершины в стеке в топологическом сортировке. –