Files
comp3958/assignment/digraph.mli
T
2026-04-01 20:24:58 -07:00

36 lines
1.5 KiB
OCaml

type t (* the abstract digraph type *)
type edge = string * string * int (* type of an edge *)
(** raised by [add_edge] and [of_edges] when adding an edge to a digraph;
this could happen when the edge has non-positive length, or the 2 vertices
in the edge are not distinct, or the edge to add is a "duplicate" in the
sense that there is already an edge in the graph with the same source
and destination vertices, and which can be of the same length or of
different lengths.
*)
exception Invalid of string (* the string argument specifies the reason *)
(** [empty] is the empty digraph *)
val empty : t
(** [add_edge edge graph] adds [edge] to [graph].
Raises: [Inv_edge] if [edge] is invalid; raises [Inv_graph] if [edge] is
a duplicate with a different length *)
val add_edge : edge -> t -> t
(** [of_edges edges] is the digraph formed from the list [edges].
May raise [Inv_edge] or [Inv_graph] (see above) *)
val of_edges : edge list -> t
(** [edges graph] is the sorted list of all distinct edges in [graph] *)
val edges : t -> edge list
(** [vertices graph] is the list of all distinct vertices (in alphabetical
order) of [graph] *)
val vertices : t -> string list
(** [neighbors vertex graph] is the list of neighbors of [vertex] in
[graph]; each neighbor is a pair of the form ([vertex2], [length]) which
indicates there is an edge from [vertex] to [vetex2] of length [length]) *)
val neighbors : string -> t -> (string * int) list