我试图找到一个迷宫的路径,下面是代码,它假设进入recursiveSolve循环但它继续退出,如果条件我在这里做错了可以有人帮我吗? 默认情况下,我将Washere和correctpath数组设置为false。
recursiveSolve(0, 0);
public static int[,] maze = {{0, 0, 0, 0, 0, 1},
{1, 1, 0, 0, 0, 1},
{0, 0, 0, 1, 0, 0},
{0, 1, 1, 0, 0, 1},
{0, 1, 0, 0, 1, 0},
{0, 1, 0, 0, 0, 1}};
public static Boolean recursiveSolve(int row, int col) {
Boolean[,] wasHere = new Boolean[6, 6];
Boolean[,] correctPath = new Boolean[6, 6]; // The solution to the maze
if (maze[row, col] == 1 || wasHere[row, col]) {
return false;
}
else if (row == 0 || row == 6 - 1 || col == 0 || col ==6 - 1) {
correctPath[row, col] = true;
return true;
}
else {
wasHere[row, col] = true;
if (recursiveSolve(row - 1, col) || recursiveSolve(row + 1, col) ||
recursiveSolve(row, col - 1) ||
recursiveSolve(row, col +1)) {
correctPath[row, col] = true;
return true; // successfully escaped; this square is on path
}
else {
return false;
}
}
}
答案 0 :(得分:1)
你的wasHere和correctPath数组是recursiveSolve函数的本地数组,这意味着每次进入这个函数时,数组都将被引入false(或随机值)。
首先尝试使这些数组也是静态的,看看是否能解决你的问题总是假的。
此外,你应该从迷宫内的某个地方而不是边缘开始搜索(0,0表示你已经退出迷宫)。 如果您想从0,0开始,请将其标记为起点,并且不要将其作为有效的解决方案。
答案 1 :(得分:0)
如果您实际上正在进行寻路,并且这不是需要此特定解决方案的练习,那么您可能还需要查看可能更高效且更健壮的A *算法。