graaf 0.70.1

Work with directed graphs.
Documentation

Graaf   Crates.io Build status API reference Coverage Status

Work with directed graphs in Rust.

Table of Contents

Installation

Add the following to your Cargo.toml:

[dependencies]
graaf = "0.70.1"

Digraph Types

Graaf provides three representations of directed graphs.

These types eagerly implement digraph operations and digraph algorithms.

Creating Digraphs

The gen module provides six digraph generators.

  • The Biclique trait generates a complete bipartite digraph.
  • The Complete trait generates a complete digraph.
  • The Cycle trait generates a digraph with a cycle of a given length.
  • The Empty trait generates a digraph with no arcs.
  • The RandomTournament trait generates a random tournament.
  • The Star trait generates a star digraph.

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 AddArcWeighted trait adds an arc to an arc-weighted digraph.
  • The AddArc trait adds an arc to an unweighted digraph.
  • The ArcWeight trait returns the weight of an arc.
  • The ArcsWeighted trait returns the arcs and their weights in a digraph.
  • The Arcs trait returns the arcs in a digraph.
  • The Converse trait returns the converse of a digraph.
  • The HasArc trait checks if an arc exists in a digraph.
  • The Indegree trait returns the indegree of a vertex.
  • The IsSimple trait checks if a digraph contains no loops or parallel arcs.
  • The Order trait returns the number of vertices.
  • The OutNeighborsWeighted trait returns the weighted out-neighbors of a vertex.
  • The OutNeighbors trait returns the out-neighbors of a vertex.
  • The Outdegree trait returns the outdegree of a vertex.
  • The RemoveArc trait removes an arc from a digraph.
  • The Size trait returns the number of arcs in a digraph.
  • The Vertices trait returns the vertices in a digraph.

Extended Operations

The extended traits derive their implementation from the basic operations.

  • The Degree trait returns the degree of a vertex.
  • The DegreeSequence trait returns the degree sequence of a digraph.
  • The HasEdge trait checks if an edge exists in a digraph.
  • The InNeighbors trait returns the in-neighbors of a vertex.
  • The IsBalanced trait checks if a digraph is balanced.
  • The IsComplete trait checks if a digraph is complete.
  • The IsIsolated trait checks if a vertex is isolated.
  • The IsOriented trait checks if a digraph is oriented.
  • The IsPendant trait checks if a vertex is a pendant.
  • The IsRegular trait checks if a digraph is regular.
  • The IsSemicomplete trait checks if a digraph is semicomplete.
  • The IsSubdigraph trait checks if a digraph is a subdigraph.
  • The IsSuperdigraph trait checks if a digraph is a superdigraph.
  • The IsSymmetric trait checks if a digraph is symmetric.
  • The IsTournament trait checks if a digraph is a tournament.
  • The IsWalk trait 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 an arc-weighted digraph with negative weights.

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, where applicable.

These functions start from one source vertex.

Depth-First Search (DFS)

A depth-first search explores the vertices of an unweighted digraph in order of their depth from a source.

Dijkstra's Algorithm

Dijkstra's algorithm finds the shortest paths in an arc-weighted digraph.

These functions start from one or more source vertices and allow a custom step function, target predicate, distance array, and heap, where applicable.

These functions start from one source vertex.

Floyd-Warshall

The Floyd-Warshall algorithm finds the shortest paths between all pairs of vertices in an arc-weighted digraph.

  • The distances function finds the shortest distances.

Breadth-First Tree

A breadth-first tree is the result of a breadth-first search.

  • The search method finds a vertex by value.
  • The search_by method finds a vertex by predicate.

These functions produce a breadth-first tree.

Distance Matrix

A distance matrix contains the shortest distances between all pairs of vertices in a digraph.

  • The center method finds the center of the digraph.
  • The diameter method finds the diameter of the digraph.
  • The eccentricities method returns the eccentricities of the vertices.
  • The is_connected method checks if the digraph is connected.
  • The periphery method finds the periphery of the digraph.

Naming Conventions

  • s denotes a source vertex.
  • t denotes a target vertex.
  • u denotes a tail vertex or the first vertex in scope.
  • v denotes a head vertex or the second vertex in scope.
  • w denotes the weight of an arc.
  • x denotes a tail vertex or the third vertex in scope.
  • y denotes a head vertex or the fourth vertex in scope.

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.