题解 | #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!(""); } }