pathfinding

Unix build Status Windows build Status Current Version Documentation License: Apache-2.0/MIT

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

Those algorithms are generic over their arguments.

Using this crate

In your Cargo.toml, put:

ini [dependencies] pathfinding = "0.4"

You can then pull your preferred algorithm (BFS in this example) using:

``` rust extern crate pathfinding;

use pathfinding::bfs; ```

Example

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

``` rust use pathfinding::bfs;

[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]

struct Pos(i32, i32);

impl Pos { fn neighbours(&self) -> Vec { 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.neighbours(), |p| *p == GOAL); assert_eq!(result.expect("no path found").len(), 5); ```

License

This code is released under a dual Apache 2.0 / MIT free software license.