Documentation
ocamlgraph lib
Graph
. Sig
. G
Module type
Common signature for all graphs.
Graph structureVertices 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?
Size functionsDegree of a vertex
val out_degree : t -> vertex -> int
out_degree g v
returns the out-degree of v
in g
.
in_degree g v
returns the in-degree of v
in g
.
Membership functionsval mem_vertex : t -> vertex -> bool
val mem_edge_e : t -> edge -> bool
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
.
find_all_edges g v1 v2
returns all the edges from v1
to v2
.
Successors and predecessorsYou should better use iterators on successors/predecessors (see Section "Vertex iterators").
succ g v
returns the successors of v
in g
.
pred g v
returns the predecessors of v
in g
.
Labeled edges going from/to a vertex
succ_e g v
returns the edges going from v
in g
.
pred_e g v
returns the edges going to v
in g
.
Graph iteratorsval iter_vertex : (vertex -> unit) -> t -> unit
Iter on all vertices of a graph.
val fold_vertex : (vertex -> 'a -> 'a ) -> t -> 'a -> 'a
Fold on all vertices of a graph.
Iter on all edges of a graph. Edge label is ignored.
Fold on all edges of a graph. Edge label is ignored.
val iter_edges_e : (edge -> unit) -> t -> unit
Iter on all edges of a graph.
val fold_edges_e : (edge -> 'a -> 'a ) -> t -> 'a -> 'a
Fold on all edges of a graph.
Map on all vertices of a graph.
Vertex iteratorsEach 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.
val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
val fold_succ_e : (edge -> 'a -> 'a ) -> t -> vertex -> 'a -> 'a
val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
val fold_pred_e : (edge -> 'a -> 'a ) -> t -> vertex -> 'a -> 'a