题解 | Sudoku
Sudoku
https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//棋盘
int[][] grid = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
grid[i][j] = scanner.nextInt();
}
}
fillSudoku(grid);
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 8; j++) {
System.out.print(grid[i][j] + " ");
}
System.out.println(grid[i][8]);//每行的最后一个数字换行
}
}
public static boolean fillSudoku(int[][] grid) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (grid[i][j] != 0) continue;
for (int k = 1; k <= 9; k++) {
if (isNumValid(grid, i, j, k)) {
//把k放到当前位置
grid[i][j] = k;
if(fillSudoku(grid)){
return true;
}
grid[i][j] = 0;
}
}
//9个数都试玩了,都不行
return false;
}
}
return true;
}
public static boolean isNumValid(int[][] grid, int i, int j, int val) {
//横向判断
for (int k = 0; k < 9; k++) {
if (grid[i][k] == val && k != j) {
return false;
}
}
//纵向判断
for (int m = 0; m < 9; m++) {
if (grid[m][j] == val && m != i) {
return false;
}
}
//九宫格判断
int startRow = (i / 3) * 3, startCol = (j / 3) * 3;
for (int y = startRow; y < startRow + 3; y++) {
for (int z = startCol; z < startCol + 3; z++) {
if (y != i && z != j && grid[y][z] == val) {
return false;
}
}
}
return true;
}
}
360集团公司福利 432人发布
