1.はじめに
プログラムはreadSolutionOメソッドを呼び出して数独ソリューションを読み取り、数独グリッドを表す2次元配列を返します。isValid(grid)メソッドは、各値が1から9までの数値であるかどうか、および各グリッドの値が有効であるかどうかを確認することにより、正しい値がグリッドに配置されているかどうかを確認します。isValid(i、j.grid)メソッドは、grid [i] [j]の値が有効かどうかを確認します。grid [i] [; j]がi番目の行、j番目の列、および3x3ボックスに複数回表示されるかどうかをチェックします。
2.コード
package com.zhuo.base;
import java.util.Scanner;
public class CheckSudocuSolution {
public static void main(String[] args) {
int[][] grid = readSolution();//读取数独解
System.out.println(isvalid(grid) ? "valid solution" : "invalid solution");
}
/*从控制台读取数独解决方案*/
public static int[][] readSolution() {
Scanner input = new Scanner(System.in);
System.out.println("Enter a sudoku puzzle solution: ");
int[][] grid = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j <9; j++)
grid[i][j] = input.nextInt();
}
return grid;
}
/*检查解决方案是否有效*/
public static boolean isvalid(int[][] grid) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++)
if (grid[i][j] < 0 || grid[i][j] > 9 || !isvalid(i, j, grid))
return false;
}
return true;
}
public static boolean isvalid(int i, int j, int[][] grid) {
/*检查网格[i][j]在j的行中是否唯一*/
for (int row = 0; row < 9; row++)
if (row != i && grid[row][j] == grid[i][j])
return false;
/*检查网格[i][j]在i的行中是否唯一*/
for (int column = 0; column < 9; column++)
if (column != j && grid[i][column] == grid[i][j])
return false;
for (int row = (i / 3) * 3; row < (i / 3) * 3 + 3; row++ )
for(int col = (j / 3) * 3; col < (j / 3) * 3 + 3; col++)
if (row != i && col != j && grid[row][col] == grid[i][j])
return false;
return true;
}
}
3.達成された結果
Enter a sudoku puzzle solution:
9 6 3 1 7 4 2 5 8
1 7 8 3 2 5 6 4 9
2 5 4 6 8 9 7 3 1
8 2 1 4 3 7 5 9 6
4 9 6 8 5 2 3 1 7
7 3 5 9 6 1 8 2 4
5 8 9 7 1 3 4 6 2
3 1 7 2 4 6 9 8 5
6 4 2 5 9 8 1 7 3
valid solution
Process finished with exit code 0