问题描述
public static int bombs(char[][] maze,int row,int col,ArrayList<int[]> checked,int bombs)
{
int size = maze.length;
String value = Character.toString(maze[row][col]);
if (value.equals("#"))//add one to bomb if it went through a wall
{
bombs = bombs+1;
}
if(row==size-1&&col==size-1)//if it has reached the end
{
return steps;
}
if(inBounds(row,col,size)) //if point is in bounds
{
if(!pointWasChecked(row,checked))
{ //if point has not been checked
checked.add(new int[]{row,col});
}
}
return 0;
}
/*
. . # # #
. # . . #
# # # # #
# . # . .
# # # . .
example maze,this one's smallest path should be 2 bombs used
. is a path
# is a wall
/*
这是一种遍历迷宫的递归方法,当它到达墙壁时使用炸弹,但我想返回所需的最少数量的炸弹。我已经知道如何通过再次调用该方法并执行 row+1、row-1、col+1、col-1 来遍历迷宫。我只是对我需要返回的内容感到困惑,这样我才能到达最后,不要返回零,并返回最少数量的炸弹。 感谢您的帮助!
解决方法
简短版本:返回 Integer.MAX_VALUE
而不是零。
长版本:假设 return steps
实际上是 return bombs
,并且您已经知道如何进行递归调用:
如果当前位置有效(入站、尚未检查和未结束),您将在所有 4 个方向上进行探索。 在探索了所有四个方向后,您最终会得到 4 个值(在每个方向上前进后的步数)。然后返回每个值中的最小值。
如果当前位置无效,则必须返回一个大于任何正确值的值。最好的选择是 Integer.MAX_VALUE
,它是可以用整数编码的最大值。
请注意,在大型迷宫中,蛮力递归可能需要相当长的时间,并且很容易导致堆栈溢出。