九宫重排java
时间: 2023-10-11 18:17:51 浏览: 137
九宫重排是一种经典的数学问题,也被称为八数码问题。具体来说,给定一个3x3的棋盘,上面放置了1-8的数字和一个空格,要求通过交换数字和空格的位置来使得棋盘上的数字按照从左到右、从上到下的顺序排列,空格在最后一个位置。下面是一个简单的Java实现:
```java
import java.util.Arrays;
public class Puzzle {
private int[][] board;
private int row;
private int col;
public Puzzle(int[][] board) {
this.board = board;
// 找到空格的位置
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == 0) {
row = i;
col = j;
return;
}
}
}
}
public boolean move(int direction) {
// 根据方向计算空格的新位置
int newRow = row;
int newCol = col;
switch (direction) {
case 0: // 上
newRow--;
break;
case 1: // 下
newRow++;
break;
case 2: // 左
newCol--;
break;
case 3: // 右
newCol++;
break;
default:
return false;
}
// 判断新位置是否合法
if (newRow < 0 || newRow >= 3 || newCol < 0 || newCol >= 3) {
return false;
}
// 交换数字和空格的位置
board[row][col] = board[newRow][newCol];
board[newRow][newCol] = 0;
row = newRow;
col = newCol;
return true;
}
public boolean isSolved() {
// 判断棋盘是否已经解决
int[] flatBoard = Arrays.stream(board).flatMapToInt(Arrays::stream).toArray();
for (int i = 0; i < flatBoard.length - 1; i++) {
if (flatBoard[i] != i + 1) {
return false;
}
}
return true;
}
}
```
在这个实现中,我们用一个二维数组来表示九宫格,其中0表示空格。在Puzzle类的构造函数中,我们找到空格的位置,并将其记录在成员变量row和col中。在move方法中,我们根据方向计算出空格的新位置,然后判断这个位置是否合法。如果合法,我们就将数字和空格的位置互换,并更新row和col的值。在isSolved方法中,我们将棋盘展开成一维数组,并检查其中的数字是否按照从左到右、从上到下的顺序排列,空格在最后一个位置。
阅读全文