使用java编程实现一个3×3的九宫格,将1至9的数字填入方格,使矩阵中心的元素为5,且每行每列及每个对角线的值相加都相同。
时间: 2024-10-20 15:06:40 浏览: 31
在Java中实现一个满足条件的3x3九宫格,可以采用数组或者二维列表来存储数字,并通过循环和条件判断来填充数字。以下是使用二维整数数组的一种解决方案:
```java
import java.util.ArrayList;
import java.util.List;
public class SudokuGrid {
private int[][] grid = new int[3][3];
public void fillSudoku() {
// 中心位置设为5
set(1, 1, 5);
// 遍历所有单元格,已知中心点,其他8个单元格按照对称原则填充
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i != 1 || j != 1) { // 中心以外的单元格
List<Integer> remainingNumbers = generateRemainingNumbers(i, j);
while (!remainingNumbers.isEmpty()) {
int number = remainingNumbers.remove(0);
if (isValid(i, j, number)) {
set(i, j, number);
break;
}
}
}
}
}
}
private boolean isValid(int row, int col, int number) {
// 检查行、列是否合法
for (int k = 0; k < 3; k++) {
if (grid[row][k] == number || grid[k][col] == number) {
return false;
}
}
// 检查左上到右下的对角线
int diaRow = row - col + 1;
if (diaRow < 0 || diaRow >= 3 || grid[diaRow][diaRow] == number) {
return false;
}
// 检查左下到右上的对角线
diaRow = row + col;
if (diaRow < 0 || diaRow >= 3 || grid[diaRow][3 - 1] == number) {
return false;
}
return true;
}
private List<Integer> generateRemainingNumbers(int row, int col) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 9; i++) {
if (i != grid[row][col]) {
numbers.add(i);
}
}
return numbers;
}
private void set(int row, int col, int value) {
grid[row][col] = value;
}
// 可以添加方法打印网格以验证结果
public void printGrid() {
for (int[] row : grid) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
// 示例调用
public static void main(String[] args) {
SudokuGrid sudoku = new SudokuGrid();
sudoku.fillSudoku();
sudoku.printGrid();
}
}
```
在这个代码中,`fillSudoku`方法负责填充九宫格,`isValid`方法检查某个数字能否放入给定的位置,`generateRemainingNumbers`生成剩余可用的数字,`set`用于设置单元格值。
运行这个程序,你会看到一个满足条件的3x3九宫格。
阅读全文