Дано: невзвешенный направленный граф (G=(E,V)), который может содержать любое количество циклов.
Цель: для всех вершин мне нужен самый длинный простой путь к некоторой целевой вершине X в V.
Идея алгоритма:
For each v in V
v.distanceToTarget = DepthFirstSearch(v)
Next
DepthFirstSearch(v as Vertex)
if v = target then
'Distance towards target is 0 for target itself
return 0
elseif v.isVisitedInCurrentDFSPath then
'Cycle found -> I wont find the target when I go around in cycles -> abort
return -infinity
else
'Return the maximum Distance of all Successors + 1
return max(v.Successors.ForEach(Function(v) DepthFirstSearch(v) )) + 1
end if
Это верно для всех случаев? (Предполагая, что цель может быть достигнута из каждой вершины)
Количество ребер в моих графах очень мало. Предположим |Е| ‹= 3*|В| держит. Как мне вычислить среднюю временную сложность?
Спасибо!