SubTreeMake.Tree
Sourceinclude Sig.G with type V.label = G.V.t
Abstract type of graphs
module V : Sig.VERTEX with type label = G.V.t
Vertices have type V.t
and are labeled with type V.label
(note that an implementation may identify the vertex with its label)
Edges have type E.t
and are labeled with type E.label
. src
(resp. dst
) returns the origin (resp. the destination) of a given edge.
Is this an implementation of directed graphs?
Degree of a vertex
find_edge g v1 v2
returns the edge from v1
to v2
if it exists. Unspecified behaviour if g
has several edges from v1
to v2
.
You should better use iterators on successors/predecessors (see Section "Vertex iterators").
Labeled edges going from/to a vertex
Iter on all edges of a graph. Edge label is ignored.
Fold on all edges of a graph. Edge label is ignored.
Map on all vertices of a graph.
The current implementation requires the supplied function to be injective. Said otherwise, map_vertex
cannot be used to contract a graph by mapping several vertices to the same vertex. To contract a graph, use instead create
, add_vertex
, and add_edge
.
Each iterator iterator f v g
iters f
to the successors/predecessors of v
in the graph g
and raises Invalid_argument
if v
is not in g
. It is the same for functions fold_*
which use an additional accumulator.
<b>Time complexity for ocamlgraph implementations:</b> operations on successors are in O(1) amortized for imperative graphs and in O(ln(|V|)) for persistent graphs while operations on predecessors are in O(max(|V|,|E|)) for imperative graphs and in O(max(|V|,|E|)*ln|V|) for persistent graphs.
iter/fold on all successors/predecessors of a vertex.
iter/fold on all edges going from/to a vertex.
Vertex attributes
Edge attributes
The box (if exists) which the vertex belongs to. Boxes with same names are not distinguished and so they should have the same attributes.