描述
输入一个数独棋盘,用0代表待填的空格
输出数独的一个解
示例
输入:
0 9 2 4 8 1 7 6 3
4 1 3 7 6 2 9 8 5
8 6 7 3 5 9 4 1 2
6 2 4 1 9 5 3 7 8
7 5 9 8 4 3 1 2 6
1 3 8 6 2 7 5 9 4
2 7 1 5 3 8 6 4 9
3 8 6 9 1 4 2 5 7
0 4 5 2 7 6 8 3 1
输出:
5 9 2 4 8 1 7 6 3
4 1 3 7 6 2 9 8 5
8 6 7 3 5 9 4 1 2
6 2 4 1 9 5 3 7 8
7 5 9 8 4 3 1 2 6
1 3 8 6 2 7 5 9 4
2 7 1 5 3 8 6 4 9
3 8 6 9 1 4 2 5 7
9 4 5 2 7 6 8 3 1
思路
由于一个数独题目可能有多个解,后填的数字会影响先填的数字的正确性,因此简单的遍历并不能解决问题,需要深度优先搜索来找到一个解。
对每一个空格按1-9顺序检查是否是在目前已知棋局下可能的解,假设这个空格正确的情况下往后递归遍历空格。
如果遇到有填不了的空格,那么说明前面填的空格有错误,回溯。
如果填完了整个棋盘,那么就说明找到了一个解,输出即可。
代码
public class HJ44_Sudoku {
//使用深度优先搜索DFS
private static Scanner scanner=new Scanner(System.in);
p