就是通过深度搜索一步步的去找正确的结果
package com.lanqiaobei;
import java.util.Scanner;
public class 数独dfs {
//打印符合条件的结果
public static void print(char[][] table){
for(int i=0;i<9;i++)
System.out.println(new String(table[i]));
}
public static boolean check(char[][] a,int x,int y,int t){
//检查同行和同列
for(int i=0;i<9;i++ ){
if(a[x][i]==(char)(t+'0')) return false;
if(a[i][y]==(char)(t+'0'))return false;
}
//检查九宫格
for(int i=(x/3)*3;i<(x/3+1)*3;i++)
for (int j = (y/3) * 3; j < (y/3 + 1) * 3; j++) {
if (a[i][j] == (char) ('0' + t)) return false;
}
return true;
}
//dfs找结果
public static void solve(char[][] table, int x, int y) {
//递归的出口
if (x == 9) {
print(table);
//找到结果后则停止判断
System.exit(0);
}
//对当前的数据进行操作,符合,则往下走
if (table[x][y] == '0') {
for (int i = 1; i < 10; i++) {
if (check(table, x, y, i)) {
table[x][y] = (char) ('0' + i);
//进入下一个
solve(table, x + ( y+1)/ 9, (1 + y)% 9);
}
}
table[x][y] = '0';//回溯
}else{
solve(table, x + ( y+1)/ 9, (1 + y)% 9);
}
}
public static void main (String[]args){
Scanner sc = new Scanner(System.in);
char[][] table = new char[9] [];
for (int i = 0; i < 9; i++) {
table[i] = sc.nextLine().toCharArray();
}
solve(table, 0, 0);
System.out.println("ds");
}
}