# Crate sudoku_solver[−][src]

Expand description

## Sudoku solver library

This library provides a very simple backtracking algorithm for solving sudoku puzzles.

### Examples

The `solve()` function will yield the first solution found for a given puzzle, or `None` if no solution exists:

``````let board = Board::from(&[
[0, 2, 0, 0, 0, 0, 0, 0, 0], // row 1
[0, 0, 0, 6, 0, 0, 0, 0, 3], // row 2
[0, 7, 4, 0, 8, 0, 0, 0, 0], // row 3
[0, 0, 0, 0, 0, 3, 0, 0, 2], // row 4
[0, 8, 0, 0, 4, 0, 0, 1, 0], // row 5
[6, 0, 0, 5, 0, 0, 0, 0, 0], // row 6
[0, 0, 0, 0, 1, 0, 7, 8, 0], // row 7
[5, 0, 0, 0, 0, 9, 0, 0, 0], // row 8
[0, 0, 0, 0, 0, 0, 0, 4, 0], // row 9
]);

println!("Puzzle:\n{}\n", board);

if let Some(solution) = solve(&board) {
println!("Solution:\n{}\n", solution);
} else {
println!("No solution found.");
}``````

If a puzzle has multiple solutions and you want to iterate over them, you can use `SolutionIter`:

``````let board = Board::from(&[
[9, 0, 6, 0, 7, 0, 4, 0, 3], // row 1
[0, 0, 0, 4, 0, 0, 2, 0, 0], // row 2
[0, 7, 0, 0, 2, 3, 0, 1, 0], // row 3
[5, 0, 0, 0, 0, 0, 1, 0, 0], // row 4
[0, 4, 0, 2, 0, 8, 0, 6, 0], // row 5
[0, 0, 3, 0, 0, 0, 0, 0, 5], // row 6
[0, 3, 0, 7, 0, 0, 0, 5, 0], // row 7
[0, 0, 7, 0, 0, 5, 0, 0, 0], // row 8
[4, 0, 5, 0, 1, 0, 7, 0, 8], // row 9
]);

let solutions = SolutionIter::new(&board);

assert_eq!(solutions.count(), 2);``````

## Re-exports

`pub use board::*;`
`pub use solver::*;`

## Modules

The `Board` type

Sudoku solving routines.