3 回答
TA貢獻1752條經驗 獲得超4個贊
就像你(想想你)解決一個真正的迷宮一樣。
對于每個位置,請記錄您從哪個方向到達以及您離開的(有效)方向(我想在你離開之前)。
當您返回某個位置(應該允許重新訪問)時,將已經嘗試過的方向視為與墻壁相同的方式 - 即它是無效的。
當你沒有更有效的方向時,回到你來的時候。
因此,與代碼的唯一區別是記住每個位置的“嘗試和失敗”方向。這應該足以防止遞歸。
TA貢獻1841條經驗 獲得超3個贊
正如DrPhill所說,你必須跟蹤你去過的地方。你已經在函數中這樣做了,但你沒有在函數中使用這些信息。markcheckValidMovement
您應該將該函數更改為如下所示:
private static boolean checkValidMovement(int[][] maze, int stepX, int stepY , int movement, int[][] solution)
{
if(checkNotOutOfBounds(maze, stepX, stepY, movement)
&& checkNotCollideWithObstacle(maze, stepX, stepY, movement)
&& isNotYetVisited(maze, stepX, stepY, movement, solution))
{
return true;
}
return false;
}
其中,如果 at 下一步不相等,則函數返回 false。isNotYetVisitedsolution1
希望這有幫助。
添加回答
舉報
