## Parameters

`module G : Sig.I with type V.label = int`

## Signature

`type graph = G.t`
`type vertex = G.V.t`
`type edge_label = G.E.label`
`val graph : ?loops:bool -> v:int -> e:int -> unit -> graph`

`graph v e` generates a random graph with exactly `v` vertices and `e` edges. Vertices are labeled with `0` ... `v-1`. The boolean `loops` indicates whether loops are allowed; default value is no loop (`false`).

- raises `Invalid_argument`

  if `e` exceeds the maximal number of edges.

`val labeled : (vertex -> vertex -> edge_label) -> ?loops:bool -> v:int -> e:int -> unit -> graph`

`labeled f` is similar to `graph` except that edges are labeled using function `f`.

- raises `Invalid_argument`

  if there are too many edges.

The two functions above actually make a choice between two different implementations according to the ratio e/(v*v). When this ratio is small, `random_few_edges` is selected; otherwise `random_many_edges` is selected.

`val random_few_edges : loops:bool -> v:int -> e:int -> graph`
`val random_many_edges : loops:bool -> v:int -> e:int -> graph`
`val gnp : ?loops:bool -> v:int -> prob:float -> unit -> graph`

random graph using the G(n,p) model. `gnp v prob` generates a random graph with exactly `v` vertices and where each edge is selected with probability `prob`

`val gnp_labeled : (vertex -> vertex -> edge_label) -> ?loops:bool -> v:int -> prob:float -> unit -> graph`

`gnp_labeled add_edge v e` is similar to `gnp` except that edges are labeled using function `f`.