module Abstract:
Abstract Persistent Unlabeled Graphs.
include Sig.G
A persistent graph is a graph.
val empty : t
The empty graph.
val add_vertex : t -> vertex -> t
add_vertex g v
adds the vertex v
to the graph g
.
Just return g
if v
is already in g
.
val remove_vertex : t -> vertex -> t
remove g v
removes the vertex
v
from the graph
g
(and all the edges going from
v
in
g
).
Just return
g
if
v
is not in
g
.
Time complexity for ocamlgraph implementations:
O(|V|*ln(|V|)) for unlabeled graphs and
O(|V|*max(ln(|V|),D)) for labeled graphs.
D is the maximal degree of the graph.
val add_edge : t -> vertex -> vertex -> t
add_edge g v1 v2
adds an edge from the vertex v1
to the vertex v2
in the graph g
.
Add also v1
(resp. v2
) in g
if v1
(resp. v2
) is not in g
.
Just return g
if this edge is already in g
.
val add_edge_e : t -> edge -> t
add_edge_e g e
adds the edge e
in the graph g
.
Add also E.src e
(resp. E.dst e
) in g
if E.src e
(resp. E.dst
e
) is not in g
.
Just return g
if e
is already in g
.
val remove_edge : t -> vertex -> vertex -> t
remove_edge g v1 v2
removes the edge going from v1
to v2
from the
graph g
. If the graph is labelled, all the edges going from v1
to
v2
are removed from g
.
Just return g
if this edge is not in g
.
Raises Invalid_argument
if v1
or v2
are not in g
.
val remove_edge_e : t -> edge -> t
remove_edge_e g e
removes the edge e
from the graph g
.
Just return g
if e
is not in g
.
Raises Invalid_argument
if E.src e
or E.dst e
are not in g
.