和迷宫题一样用深度优先算法

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // while (in.hasNextInt()) { // 注意 while 处理多个 case
        //     int a = in.nextInt();
        //     int b = in.nextInt();
        //     System.out.println(a + b);
        // }
        int[][] table = new int[9][9];
        List<Node> list = new ArrayList<>();
        int[] index = new int[2];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                table[i][j] = in.nextInt();
                if (table[i][j] == 0) {
                    list.add(new Node(i, j));
                }
            }
        }
        dfs(table, list, 0);
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                System.out.print(table[i][j] + " ");
            }
            System.out.println();
        }
    }
    private static boolean dfs(int[][] table, List<Node> nodes, int index) {
        if (index >= nodes.size()) {
            return true;
        }
        Node node = nodes.get(index);
        int x = node.x;
        int y = node.y;
        index++;
        for (int i = 1; i <= 9; i++) {
            if (!contains(table, x, y, i)) {
                table[x][y] = i;
                if (dfs(table, nodes, index)) {
                    return true;
                }
            }
        }
        index--;
        table[x][y] = 0;
        return false;
    }

    private static boolean contains(int[][] table, int x, int y, int val) {
        int xStart = (x / 3) * 3;
        int yStart = (y / 3) * 3;
        for (int i = xStart; i < xStart + 3; i++) {
            for (int j = yStart; j < yStart + 3; j++) {
                if (table[i][j] == val) {
                    return true;
                }
            }
        }
        for (int i = 0; i < 9; i++) {
            if (table[x][i] == val) {
                return true;
            }
            if (table[i][y] == val) {
                return true;
            }
        }
        return false;
    }
}
class Node {
    int x;
    int y;

    Node (int x, int y) {
        this.x = x;
        this.y = y;
    }
}