module Graph:S
Imperative Undirected Graphs.
Edges may be labeled or not:
Vertices may be concrete or abstract:
How to choose between concrete and abstract vertices for my graph implementation?
Usually, if you fall into one of the following cases, use abstract vertices:
In other cases, it is certainly easier to use concrete vertices.
module Concrete: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 Graphs.
module Abstract:
Abstract Imperative Unlabeled Graphs.
module ConcreteLabeled: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 Graphs.
module AbstractLabeled:
Abstract Imperative Labeled Graphs.