2013-11-21 24 views
0

我被給了一些代碼,已經包含了一切建立一個迷宮。我寫的makeMove方法來解決迷宮,我已經在這裏完成:迷宮求解器,對角線移動只有

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); 
    } 
    System.out.print("\n[" + row + "," + col + "] "); // display location 
}//end makeMove 

}

這個假設開始在左上角和結束是在右下角,這代碼工作就像它應該。

不過,現在我需要修改它,使它只允許對角線移動....

和我在一個展臺還在,一片空白上如何做到這一點

謝謝任何和所有幫助

+2

沒有太大的迷宮,因爲你似乎會允許代碼穿過牆壁。 –

+2

@MarcB我認爲這就是'迷宮[行] [col] == 1'的用途。 – Zong

+0

@MarB a'1'代表一面牆,如果它撞到了一面牆會倒退。 – user2745043

回答

1

使用

makeMove(row - 1, col - 1); 
makeMove(row - 1, col + 1); 
makeMove(row + 1, col - 1); 
makeMove(row + 1, col + 1); 
+0

我不知道是否它的一個技巧問題,我只是在想如何完成,但另一個任務是修改任何方法需要使用一維數組的迷宮,並訪問而不是二維。我只需要列,或者我需要以某種方式將列添加到列?感謝您的幫助 – user2745043

+0

您應該提出其他問題作爲新問題,但我可以幫助您。您可以很容易地將二維數組映射到一維數組。聲明數組爲'boolean [] visited = new boolean [MAX_ROWS * MAX_COLS]',然後使用'visited [MAX_COLS * row + col]'訪問特定行和列的元素。您可以將其視爲採用二維數組並將這些行連接在一起形成一個長的一維數組。 – Zong

+0

我問了一個新問題,http://stackoverflow.com/questions/20126813/changing-2-d-maze-solver-to-be-used-with-1-d – user2745043