java编写一个程序创建一个9*9数独,如果输入的数组满足一个9*9数独,则输出“yes”,反之则输出“no”
时间: 2023-06-07 21:08:11 浏览: 90
java编写的数独程序
您好!关于您的问题,我是可以回答的。以下是一个可能的解决方案:
import java.util.*;
public class SudokuChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] board = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
board[i][j] = scanner.nextInt();
}
}
if (isValidSudoku(board)) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
private static boolean isValidSudoku(int[][] board) {
for (int i = 0; i < 9; i++) {
Set<Integer> row = new HashSet<Integer>();
Set<Integer> column = new HashSet<Integer>();
Set<Integer> square = new HashSet<Integer>();
for (int j = 0; j < 9; j++) {
if (board[i][j] != 0 && !row.add(board[i][j])) {
return false;
}
if (board[j][i] != 0 && !column.add(board[j][i])) {
return false;
}
int rowIndex = 3 * (i / 3);
int colIndex = 3 * (i % 3);
int x = rowIndex + j / 3;
int y = colIndex + j % 3;
if (board[x][y] != 0 && !square.add(board[x][y])) {
return false;
}
}
}
return true;
}
}
这个程序可以通过命令行输入一个9x9的数独的初始状态,然后判断该数独是否合法。如果合法,则输出"yes",否则输出"no"。
补充说明一下,这个程序使用了一个 isValidSudoku 的函数来判断数独的合法性。这个函数的主要思路是,对于数独的每一行、每一列和每一个宫格,分别用一个集合来记录其中的数字,如果其中有重复数字,则说明这个数独不合法。具体实现可以参考上面的代码,里面有详细的注释。
希望这个程序能够满足您的需求。如果您有其他问题,可以随时问我哦!
阅读全文