pub fn count_paths<T, FN, IN, FS>(start: T, successors: FN, success: FS) -> usizewhere
    T: Eq + Hash,
    FN: FnMut(&T) -> IN,
    IN: IntoIterator<Item = T>,
    FS: FnMut(&T) -> bool,
Expand description

Count the total number of possible paths to reach a destination. There must be no loops in the graph, or the function will overflow its stack.

Example

On a 8x8 board, find the total paths from the bottom-left square to the top-right square.

use pathfinding::prelude::count_paths;

let n = count_paths(
    (0, 0),
    |&(x, y)| {
        [(x + 1, y), (x, y + 1)]
            .into_iter()
            .filter(|&(x, y)| x < 8 && y < 8)
    },
    |&c| c == (7, 7),
);
assert_eq!(n, 3432);