6 个版本 (破坏性)
0.6.1 | 2023年8月24日 |
---|---|
0.5.0 | 2022年7月22日 |
0.4.0 | 2021年11月7日 |
0.3.0 | 2021年9月1日 |
0.2.2 | 2021年6月23日 |
#396 in 算法
38KB
734 行
Rust 数独求解器库
此库提供了一个非常简单的回溯算法,用于解决数独谜题。
示例
solve()
函数将返回给定谜题的第一个解决方案,如果不存在解决方案则返回 None
use sudoku_solver::*;
fn main() {
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.");
}
}
如果谜题有多个解决方案,并且您想要遍历它们,可以使用 SolutionIter
use sudoku_solver::*;
fn main() {
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
]);
for solution in SolutionIter::new(&board) {
println!("Solution:\n{}\n", solution);
}
}
依赖关系
~13KB