private void ComputeNoInit([NotNull] TVertex root)
        {
            IEnumerable <TVertex> orderedVertices = VisitedGraph.TopologicalSort();

            OnDiscoverVertex(root);
            foreach (TVertex vertex in orderedVertices)
            {
                OnStartVertex(vertex);
                OnExamineVertex(vertex);
                foreach (TEdge edge in VisitedGraph.OutEdges(vertex))
                {
                    OnExamineEdge(edge);
                    OnDiscoverVertex(edge.Target);

                    bool decreased = Relax(edge);
                    if (decreased)
                    {
                        OnTreeEdge(edge);
                    }
                    else
                    {
                        OnEdgeNotRelaxed(edge);
                    }
                }
                OnFinishVertex(vertex);
            }
        }