Java 将二维迷宫解算器更改为与一维迷宫解算器一起使用

Java 将二维迷宫解算器更改为与一维迷宫解算器一起使用,java,recursion,maze,Java,Recursion,Maze,给定包含构建迷宫所有内容的代码,我将编写makeMove方法来解决迷宫问题,我已经完成了,并且工作正常。然而,所有的一切都是为了使用2-D阵列的迷宫和访问,我需要编辑这个用于1-D阵列的迷宫和访问 public abstract class AbstractMaze { protected int startRow; // starting row protected int startCol; // starting column protected int endRow;

给定包含构建迷宫所有内容的代码,我将编写makeMove方法来解决迷宫问题,我已经完成了,并且工作正常。然而,所有的一切都是为了使用2-D阵列的迷宫和访问,我需要编辑这个用于1-D阵列的迷宫和访问

public abstract class AbstractMaze {

protected int startRow;   // starting row
protected int startCol;   // starting column
protected int endRow;     // ending row
protected int endCol;     // ending column

/**
 * Declare the maze, 1's are walls and 0's are open
 */
protected int[][] maze;

protected AbstractMaze(int[][] maze, int startRow, int startCol, int endRow, int endCol) {
    super();
    this.maze = maze;
    this.startRow = startRow;
    this.startCol = startCol;
    this.endRow = endRow;
    this.endCol = endCol;
}
public void solve() {
    makeMove( startRow, startCol )
}
protected abstract void makeMove( int row, int col );
}

公共类Maze2扩展了AbstractMaze
{
公共迷宫2(int[][]迷宫、int startRow、int startCol、int endRow、int endCol){
超级(迷宫、startRow、startCol、endRow、endCol);
}
int MAX_ROWS=endRow+1;
int MAX_COLS=endCol+1;
boolean[][]已访问=新的boolean[MAX_ROWS][MAX_COLS];
受保护的void makeMove(int行,int列)
{
布尔值=false;
如果(行<0 | |行>=最大行数| | |列<0 | | |列>=最大列数| | | |列数|列数|列数|列数| |列数|列数| | |
返回;
访问[行][列]=真;
已找到=行==endRow&&col==endCol;
如果(!找到){
makeMove(行,列-1);
makeMove(行、列+1);
makeMove(第1行,第2列);
makeMove(行+1,列);
}
我是否需要改变迷宫[][]所在和参观[][]的每个地方?最简单的方法是什么


感谢您的帮助!

我假设您希望将给定的2D
迷宫
数组更改为1D
迷宫
类成员。将
迷宫
成员声明为

int ROWS = maze.length;
int COLS = maze[0].length;
this.maze = new int[ROWS * COLS];
您可以将此数组索引为
maze[COLS*row+col]
。然后需要将元素复制到:

for (int r = 0; r < ROWS; r++)
    for (int c = 0; c < COLS; c++)
        this.maze[COLS * r + c] = maze[r][c];
for(int r=0;r
如您所见,访问元素是通过
this.maze[COLS*r+c]
而不是
this.maze[r][c]
完成的。您可以将其视为使用2D数组并将行连接在一起以形成一个长的1D数组


类似地,
访问的
数组可以声明为
访问的[MAX_COLS*MAX_ROWS]
并通过
访问的[MAX_COLS*row+col]索引

我似乎无法理解如何创建一个一维迷宫,然后解决它。没有一维迷宫,迷宫中至少必须有两个方向。可能是二维迷宫的一维表示?例如,前10个元素是第1行,下10个元素是第2行,等等。然后只需做一些数学运算,在两行之间移动?如果是这样的话,他应该保持代码的原样,因为在2D数组中求解更容易,只需在程序的开头和结尾使用转换器,将输入的1D转换为2D,求解它,然后作为1D返回。@user2745043您知道当前代码中的
this.maze=maze;
,这就是大多数我提供的代码正在替换。其他的东西只是更改声明和访问元素,等等。
for (int r = 0; r < ROWS; r++)
    for (int c = 0; c < COLS; c++)
        this.maze[COLS * r + c] = maze[r][c];