题解 | #Sudoku# 学习解题思路
Sudoku
https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// 创建一个9x9的二维数组来表示数独盘面
int[][] board = new int[9][9];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 逐行读取用户输入的数独盘面
for (int i = 0; i < 9; i++) {
String[] row = reader.readLine().split(" ");
for (int j = 0; j < 9; j++) {
board[i][j] = Integer.parseInt(row[j]);
}
}
// 调用方法解决数独
solveSudoku(board);
// 打印解决后的数独盘面
printBoard(board);
}
// 解决数独的方法
public static void solveSudoku(int[][] board) {
solve(board);
}
// 递归求解数独
public static boolean solve(int[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
// 如果当前格子为空
if (board[i][j] == 0) {
for (int num = 1; num <= 9; num++) {
if (isValid(board, i, j, num)) {
board[i][j] = num;
if (solve(board)) {
return true;
} else {
board[i][j] = 0;
}
}
}
return false;
}
}
}
return true;
}
// 检查数字在当前位置是否有效
public static boolean isValid(int[][] board, int row, int col, int num) {
for (int i = 0; i < 9; i++) {
if (board[row][i] == num || board[i][col] == num ||
board[3 * (row / 3) + i / 3][3 * (col / 3) + i % 3] == num) {
return false;
}
}
return true;
}
// 打印数独盘面
public static void printBoard(int[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
System.out.print(board[i][j] + " ");
}
System.out.println();
}
}
}
查看23道真题和解析
