# Module Imperative.Digraph

    module Digraph: sig .. end

Imperative Directed Graphs.

    include Imperative.S

## Bidirectional graphs

Bidirectional graphs use more memory space (at worse the double) that standard concrete directional graphs. But accessing predecessors is in O(1) amortized instead of O(max(|V|,|E|)) and removing a vertex is in O(D*ln(D)) instead of O(|V|*ln(D)). D is the maximal degree of the graph.

    module ConcreteBidirectional: functor (V : Sig.COMPARABLE) -> Sig.I  with type V.t = V.t and type V.label = V.t and type E.t = V.t * V.t
              and type E.label = unit

Imperative Unlabeled, bidirectional graph.

    module ConcreteBidirectionalLabeled: functor (V : Sig.COMPARABLE) -> functor (E : Sig.ORDERED_TYPE_DFT) -> Sig.I  with type V.t = V.t and type V.label = V.t
              and type E.t = V.t * E.t * V.t and type E.label = E.t

Imperative Labeled and bidirectional graph.