题解 | #Sudoku#

Sudoku

https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

use std::io::{self, *};

fn main() {
    let stdin = io::stdin();
    let mut m = stdin.lock().lines().map(|line| {
        line.unwrap().split(" ").map(|i| i.parse::<u8>().unwrap()).collect::<Vec<u8>>()
    }).collect::<Vec<Vec<u8>>>();

    fn fill(mut maze: &mut Vec<Vec<u8>>) -> bool {
        for i in 0..9 {
            for j in 0..9 {
                if maze[i][j] != 0 {continue}
                'kk: for k in 1u8..=9 {
                    for l in 0..9 {
                        if maze[i][l] == k || maze[l][j] == k {continue 'kk}
                    }
                    let (i0, j0) = (i / 3 * 3, j / 3 * 3);
                    for i1 in 0..3 {
                        for j1 in 0..3 {
                            if maze[i0 + i1][j0 + j1] == k {continue 'kk}
                        }
                    }

                    maze[i][j] = k;
                    if fill(&mut maze) {
                        return true
                    }
                    maze[i][j] = 0;
                }
                return false
            }
        }

        return true
    }

    fill(&mut m);
    for i in 0..9 {
        for j in 0..9 {
            print!("{} ", m[i][j]);
        }
        println!("");
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务