Make.G
include Graph.Sig.G
module V : Graph.Sig.VERTEX
Vertices have type V.t
and are labeled with type V.label
(note that an implementation may identify the vertex with its label)
type vertex = V.t
module E : Graph.Sig.EDGE with type vertex = vertex
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.
type edge = E.t
val is_empty : t -> bool
val nb_vertex : t -> int
val nb_edges : t -> int
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
.
find_all_edges g v1 v2
returns all the 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.
val graph_attributes : t -> Graph.Graphviz.DotAttributes.graph list
Vertex attributes
val default_vertex_attributes : t -> Graph.Graphviz.DotAttributes.vertex list
val vertex_name : V.t -> string
val vertex_attributes : V.t -> Graph.Graphviz.DotAttributes.vertex list
Edge attributes
val default_edge_attributes : t -> Graph.Graphviz.DotAttributes.edge list
val edge_attributes : E.t -> Graph.Graphviz.DotAttributes.edge list
val get_subgraph : V.t -> Graph.Graphviz.DotAttributes.subgraph option
The box (if exists) which the vertex belongs to. Boxes with same names are not distinguished and so they should have the same attributes.