module Dfs:Depth-first search
| Parameters: |
|
val iter : ?pre:(G.V.t -> unit) -> ?post:(G.V.t -> unit) -> Traverse.G.t -> unititer pre post g visits all nodes of g in depth-first search,
applying pre to each visited node before its successors,
and post after them. Each node is visited exactly once.
Not tail-recursive.val prefix : (G.V.t -> unit) -> Traverse.G.t -> unititer and is tail-recursive.val postfix : (G.V.t -> unit) -> Traverse.G.t -> unitprefix_component is tail-recursive)val iter_component : ?pre:(G.V.t -> unit) ->
?post:(G.V.t -> unit) -> Traverse.G.t -> G.V.t -> unitval prefix_component : (G.V.t -> unit) -> Traverse.G.t -> G.V.t -> unitval postfix_component : (G.V.t -> unit) -> Traverse.G.t -> G.V.t -> unit
This is a variant of the iterators above where you can move on
step by step. The abstract type iterator represents the current
state of the iteration. The step function returns the next state.
In each state, function get returns the currently visited vertex.
On the final state both get and step raises exception Exit.
Note: the iterator type is persistent (i.e. is not modified by the
step function) and thus can be used in backtracking algorithms.
type iterator
val start : Traverse.G.t -> iteratorval step : iterator -> iteratorval get : iterator -> G.V.tval has_cycle : Traverse.G.t -> boolhas_cycle g checks for a cycle in g. Linear in time and space.