Graaf

Work with directed graphs in Rust.
Table of Contents
Installation
Add the following to your Cargo.toml:
[]
= "0.64.7"
Digraph Types
Graaf provides three representations of directed graphs.
- The Adjacency List type represents unweighted sparse digraphs.
- The Adjacency Matrix type represents unweighted dense digraphs.
- The Weighted Adjacency List type represents weighted sparse digraphs.
These types eagerly implement digraph operations and digraph algorithms.
Creating Digraphs
The gen module provides four digraph generators.
- The
Completetrait generates a digraph in which an arc connects every ordered pair of distinct vertices. - The
Cycletrait generates a digraph with a cycle of a given length. - The
Emptytrait generates a digraph with no arcs. - The
RandomTournamenttrait generates a random digraph in which an arc connects every unordered pair of distinct vertices.
Operations
The op module provides digraph operation traits. The digraph types implement these traits. One can implement these traits for custom digraph types. Operations form the foundation for algorithms.
Basic Operations
Individual digraph types implement the basic operations.
- The
AddArcWeightedtrait adds an arc to a weighted digraph. - The
AddArctrait adds an arc to an unweighted digraph. - The
ArcWeighttrait returns the weight of an arc. - The
ArcsWeightedtrait returns the arcs and their weights in a digraph. - The
Arcstrait returns the arcs in a digraph. - The
Conversetrait returns the converse of a digraph. - The
HasArctrait checks if an arc exists in a digraph. - The
Indegreetrait returns the indegree of a vertex. - The
IsSimpletrait checks if a digraph contains no loops or parallel arcs. - The
Ordertrait returns the number of vertices. - The
OutNeighborsWeightedtrait returns the weighted out-neighbors of a vertex. - The
OutNeighborstrait returns the out-neighbors of a vertex. - The
Outdegreetrait returns the outdegree of a vertex. - The
RemoveArctrait removes an arc from a digraph. - The
Sizetrait returns the number of arcs in a digraph. - The
Verticestrait returns the vertices in a digraph.
Extended Operations
The extended traits derive their implementation from the basic operations.
- The
Degreetrait returns the degree of a vertex. - The
HasEdgetrait checks if an edge exists in a digraph. - The
InNeighborstrait returns the in-neighbors of a vertex. - The
IsBalancedtrait checks if a digraph is balanced. - The
IsCompletetrait checks if a digraph is complete. - The
IsIsolatedtrait checks if a vertex is isolated. - The
IsOrientedtrait checks if a digraph is oriented. - The
IsPendanttrait checks if a vertex is a pendant. - The
IsRegulartrait checks if a digraph is regular. - The
IsSemicompletetrait checks if a digraph is semicomplete. - The
IsSubdigraphtrait checks if a digraph is a subdigraph of another digraph. - The
IsSuperdigraphtrait checks if a digraph is a superdigraph of another digraph. - The
IsSymmetrictrait checks if a digraph is symmetric. - The
IsWalktrait checks if a sequence of vertices is a walk in a digraph.
Algorithms
The algo module provides digraph algorithms.
Bellman-Ford-Moore
The Bellman-Ford-Moore algorithm finds the shortest paths in a weighted digraph with negative weights.
- The
single_source_distancesfunction finds the shortest distances from one source vertex to all other vertices.
Breadth-First Search (BFS)
A breadth-first search explores the vertices of an unweighted digraph in order of their distance from a source.
These functions start from one or more source vertices and allow a custom step function, target predicate, distance array, breadth-first tree, and queue value, where applicable.
- The
distancesfunction finds the shortest distances to all other vertices. - The
predecessorsfunction finds the predecessors of the vertices on the shortest paths. - The
shortest_pathfunction finds the shortest path to a target vertex.
These functions start from one source vertex.
- The
single_source_distancesfunction finds the distances to all other vertices. - The
single_source_predecessorsfunction finds the predecessors on the shortest paths. - The
single_pair_shortest_pathfunction finds the shortest path between two vertices.
Depth-First Search (DFS)
A depth-first search explores the vertices of an unweighted digraph in order of their depth from a source.
- The
dfsafunction traverses the digraph, collecting an acyclic ordering and the times of each vertex's first and last visit. - The
dfsa_predecessorsfunction collects an acyclic ordering, the predecessors, and the times of each vertex's first and last visit. - The
acyclic_orderingfunction generates an acyclic ordering of the vertices.
Dijkstra's Algorithm
Dijkstra's algorithm finds the shortest paths from one or more source vertices in a weighted digraph.
These functions start from one or more source vertices and allow a custom step function, target predicate, distance array, and heap value, where applicable.
- The
distancesfunction finds the shortest distances to all other vertices. - The
predecessorsfunction finds the predecessors of the vertices on the shortest paths. - The
shortest_pathfunction finds the shortest path to a target vertex.
These functions start from one source vertex.
- The
single_source_distancesfunction finds the shortest distances to all other vertices. - The
single_source_predecessorsfunction finds the predecessors of the vertices on the shortest paths. - The
single_pair_shortest_pathfunction finds the shortest path between two vertices.
Floyd-Warshall
The Floyd-Warshall algorithm finds the shortest paths between all pairs of vertices in a weighted digraph.
- The
distancesfunction finds the shortest distances between all pairs of vertices.
Breadth-First Tree
A breadth-first-tree is the result of a breadth-first search.
- The
searchmethod finds the path to a target vertex. - The
search_bymethod finds the path to a vertex that satisfies a predicate.
These functions produce a BreadthFirstTree.
bfs::single_source_predecessorsbfs::predecessorsdijkstra::single_source_predecessorsdijkstra::predecessors
Distance Matrix
A distance matrix contains the shortest distances between all pairs of vertices in a digraph.
- The
centermethod finds the center of the digraph. - The
diametermethod finds the diameter of the digraph. - The
eccentricitiesmethod returns the eccentricities of the vertices. - The
is_connectedmethod checks if the digraph is connected.
Project goals
- A flexible API for digraph operations
- A comprehensive set of algorithms
- Generators for common digraphs
- Competitive performance
- Full documentation
- Extensive property tests
- Complete unit test and benchmark coverage
Changelog
See CHANGELOG.md for a list of changes.
License
Licensed under Apache License, Version 2.0 or MIT license at your option.