G.reverse()
- орграф, аналогичный G
, за исключением , в котором каждый край перевернут; так, например, если G
имеет ребро от v
до w
, то G.reverse()
имеет ребро от w
до v
.
Поскольку bfs
взято из G.reverse()
и v
, bfs.hasPathTo(w)
означает "есть ли у G
путь от w
до v
", а bfs.distTo(w)
означает" длина пути G
от w
до v
". (Если бы G
было взято из *1029* вместо G.reverse()
, он обнаружил бы пути, идущие в другую сторону.)
Таким образом, алгоритм поиска циклов, который он использует: для каждого ребра (v
, w
) в G
, проверьте, есть ли у G
путь от w
до v
.
Топологическая сортировка не задействована.