Crate pathfinding

source ·
Expand description

§pathfinding

Current Version Documentation License: Apache-2.0/MIT

This crate implements several pathfinding, flow, and graph algorithms in Rust.

§Algorithms

The algorithms are generic over their arguments.

§Directed graphs

§Undirected graphs

§Matching

§Miscellaneous structures

  • A Grid type representing a rectangular grid in which vertices can be added or removed, with automatic creation of edges between adjacent vertices.
  • A Matrix type to store data of arbitrary types, with neighbour-aware methods.

§Example

We will search the shortest path on a chess board to go from (1, 1) to (4, 6) doing only knight moves.

use pathfinding::prelude::bfs;

#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
struct Pos(i32, i32);

impl Pos {
  fn successors(&self) -> Vec<Pos> {
    let &Pos(x, y) = self;
    vec![Pos(x+1,y+2), Pos(x+1,y-2), Pos(x-1,y+2), Pos(x-1,y-2),
         Pos(x+2,y+1), Pos(x+2,y-1), Pos(x-2,y+1), Pos(x-2,y-1)]
  }
}

static GOAL: Pos = Pos(4, 6);
let result = bfs(&Pos(1, 1), |p| p.successors(), |p| *p == GOAL);
assert_eq!(result.expect("no path found").len(), 5);

§Note on floating-point types

Several algorithms require that the numerical types used to describe edge weights implement Ord. If you wish to use Rust built-in floating-point types (such as f32) that implement PartialOrd in this context, you can wrap them into compliant types using the ordered-float crate.

The minimum supported Rust version (MSRV) is Rust 1.70.0.

Re-exports§

Modules§

  • cycle_detectionDeprecated
    Deprecated: moved into the directed module.
  • Algorithms for directed graphs.
  • Rectangular grid in which vertices can be added or removed, with or without diagonal links.
  • Compute a maximum weight maximum matching between two disjoints sets of vertices using the Kuhn-Munkres algorithm (also known as Hungarian algorithm).
  • Matrix of an arbitrary type and utilities to rotate, transpose, etc.
  • Export all public functions and structures for an easy access.
  • Algorithms for undirected graphs.
  • Miscellaneous utilities

Macros§

  • The matrix! macro allows the declaration of a Matrix from static data. All rows must have the same number of columns. The data will be copied into the matrix. There exist two forms: