# multigraph v0.16.1-mg.3 - API Reference

## Modules

- [Multigraph](Multigraph.md): This module defines a graph data structure, which supports directed and undirected graphs, in both acyclic and cyclic forms.
It also defines the API for creating, manipulating, and querying that structure.
- [Multigraph.Edge](Multigraph.Edge.md): This module defines the struct used to represent edges and associated metadata about them.
- [Multigraph.Pathfinding](Multigraph.Pathfinding.md): This module contains implementation code for path finding algorithms used by `libgraph`.

- [Multigraph.Pathfindings.BellmanFord](Multigraph.Pathfindings.BellmanFord.md): The Bellman–Ford algorithm is an algorithm that computes shortest paths from a single
source vertex to all of the other vertices in a weighted digraph.
It is capable of handling graphs in which some of the edge weights are negative numbers
Time complexity: O(VLogV)

- [Multigraph.PriorityQueue](Multigraph.PriorityQueue.md): This module defines a priority queue datastructure, intended for use with graphs, as it prioritizes
lower priority values over higher priority values (ideal for priorities based on edge weights, etc.).
- [Multigraph.Reducer](Multigraph.Reducer.md): Reducers provide a way to traverse a graph while applying a function at each vertex. This
can be used for a variety of things, most notably though is pre-processing a graph, for example
one might decorate vertices with their distance from some known landmarks for later use in
a cost function for A*.
- [Multigraph.Reducers.Bfs](Multigraph.Reducers.Bfs.md): This reducer traverses the graph using Breadth-First Search.

- [Multigraph.Reducers.Dfs](Multigraph.Reducers.Dfs.md): This reducer traverses the graph using Depth-First Search.

- [Multigraph.Serializer](Multigraph.Serializer.md): This module defines the Serializer behavior for graphs.

- [Multigraph.Serializers.DOT](Multigraph.Serializers.DOT.md): This serializer converts a Multigraph to a DOT file, which can then be converted
to a great many other formats using Graphviz, e.g. `dot -Tpng out.dot > out.png`.

- [Multigraph.Serializers.Edgelist](Multigraph.Serializers.Edgelist.md): This serializer converts a `Multigraph` to an edgelist suitable for using with
graph libraries such as the polyglot igraph library.

- [Multigraph.Serializers.Flowchart](Multigraph.Serializers.Flowchart.md): This serializer converts a `Multigraph` to a [Mermaid Flowchart](https://mermaid.js.org/syntax/flowchart.html).

- Exceptions
  - [Multigraph.EdgeSpecificationError](Multigraph.EdgeSpecificationError.md): This exception is raised when a Multigraph function expects one or more valid edge specifications,
but receives a term which does not match one of the allowed specification patterns.

