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
希望这有帮助。
添加回答
举报
