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 算法

MIT 许可证

38KB
734

Rust 数独求解器库

Test results Crates.io Documentation

此库提供了一个非常简单的回溯算法,用于解决数独谜题。

示例

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