37. Sudoku Solver

Problem

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character '.'.

You may assume that there will be only one unique solution.

A sudoku puzzle...

...and its solution numbers marked in red.

Related Topics:

Hash Table Backtracking

Analysis

方法一:每个空格子,分别设置 1..9 进行判断。若成功,判断下一个点,若都失败,则回溯。

方法二:设置约束。给每个格子配备一个约束数组,其约束该格子内,哪些数可以填写。在遍历格子,形成约束的过程中,某些格子可能被约束限定,只能填写某个数。如此一来,不需要尝试、回溯,即可确定填写的数。剩下的空格子,需要尝试约束后的各种可能值。这里通过排序(按照可能值的数量,从小到大),优先处理容易成功的,可以减少尝试判断的次数。

Code

暴力:

设置约束:

Last updated