給定的代碼包含了構建迷宮的一切,我寫了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);
}
public class Maze2 extends AbstractMaze
{
public Maze2(int[][] maze, int startRow, int startCol, int endRow, int endCol) {
super(maze, startRow, startCol, endRow, endCol);
}
int MAX_ROWS = endRow + 1;
int MAX_COLS = endCol + 1;
boolean[][]visited = new boolean[MAX_ROWS][MAX_COLS];
protected void makeMove(int row, int col)
{
boolean found = false;
if (row < 0 || row >= MAX_ROWS || col < 0 || col >= MAX_COLS || visited[row][col] || maze[row][col] == 1)
return;
visited[row][col] = true;
found = row == endRow && col == endCol;
if (!found) {
makeMove(row, col - 1);
makeMove(row, col + 1);
makeMove(row - 1, col);
makeMove(row + 1, col);
}
我需要改變的每處地方的迷宮[] []是,參觀[] []?最簡單的方法是什麼?
感謝您的幫助!
我似乎無法理解你將如何創建一維迷宮,然後解決它。沒有像一維迷宮那樣的東西,至少在迷宮中必須有兩個方向。 – ThaBomb
也許是2D迷宮的一維表示?例如,前10個元素是第1行,第10行第2行等。然後,只需要在行之間移動一些數學操作? – fjc
如果是這樣的話,他應該保持他的代碼原樣,因爲在2D數組中可以更容易地解決問題,只需在程序的開始和結束處使用轉換器,即可將輸入的1D轉換爲2D,解決它,然後將其作爲1D返回。 – ThaBomb