3 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個贊
就像你(想想你)解決一個真正的迷宮一樣。
對于每個位置,請記錄您從哪個方向到達(dá)以及您離開的(有效)方向(我想在你離開之前)。
當(dāng)您返回某個位置(應(yīng)該允許重新訪問)時,將已經(jīng)嘗試過的方向視為與墻壁相同的方式 - 即它是無效的。
當(dāng)你沒有更有效的方向時,回到你來的時候。
因此,與代碼的唯一區(qū)別是記住每個位置的“嘗試和失敗”方向。這應(yīng)該足以防止遞歸。

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個贊
正如DrPhill所說,你必須跟蹤你去過的地方。你已經(jīng)在函數(shù)中這樣做了,但你沒有在函數(shù)中使用這些信息。markcheckValidMovement
您應(yīng)該將該函數(shù)更改為如下所示:
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 下一步不相等,則函數(shù)返回 false。isNotYetVisitedsolution1
希望這有幫助。

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個贊
我認(rèn)為最簡單的方法是記住你最后一次存在的坐標(biāo)。如果除了回去之外沒有其他有效的動作,請返回并將您所在的位置標(biāo)記為墻壁。最后,您將到達(dá) [F]。
添加回答
舉報