迷宫求解器陷入循环(堆栈溢出错误)
Maze solver gets stuck in a loop (Stack overflow error)
我的递归求解器卡在了死胡同,无法回头,导致堆栈溢出错误。我哪里错了?
solI
是一个 public 数组。 x2
和 y2
是 public 解坐标。
0-wall
1-open path
2-tried
3-solution
递归求解器
public static boolean traverse(int x1, int y1) {
boolean done = false;
count++;
if ((count < 100) && (x1 >= 0) && (x1 < solI.length) && (y1 >= 0) && (y1 < solI.length) && (solI[x1][y1] == 1)) {
solI[x1][x1] = 2;
if ((x1 == x2) && (y1 == y2)) {
done = true;
} else {
if (!done) { //up
done = traverse(x1 - 1, y1);
}
if (!done) {//left{
done = traverse(x1, y1 - 1);
}
if (!done) {//down{
done = traverse(x1 + 1, y1);
}
if (!done) {//right
done = traverse(x1, y1 + 1);
}
}
if (done) solI[x1][y1] = 3;
}
return done;
}
问题出在您代码的第 5 行。这个solI[x1][x1] = 2;
应该改成这个solI[x1][y1] = 2;
。也忘了 count
。 max count = 100
会导致维度超过 10 * 10
.
的矩阵出现问题
我的递归求解器卡在了死胡同,无法回头,导致堆栈溢出错误。我哪里错了?
solI
是一个 public 数组。 x2
和 y2
是 public 解坐标。
0-wall
1-open path
2-tried
3-solution
递归求解器
public static boolean traverse(int x1, int y1) {
boolean done = false;
count++;
if ((count < 100) && (x1 >= 0) && (x1 < solI.length) && (y1 >= 0) && (y1 < solI.length) && (solI[x1][y1] == 1)) {
solI[x1][x1] = 2;
if ((x1 == x2) && (y1 == y2)) {
done = true;
} else {
if (!done) { //up
done = traverse(x1 - 1, y1);
}
if (!done) {//left{
done = traverse(x1, y1 - 1);
}
if (!done) {//down{
done = traverse(x1 + 1, y1);
}
if (!done) {//right
done = traverse(x1, y1 + 1);
}
}
if (done) solI[x1][y1] = 3;
}
return done;
}
问题出在您代码的第 5 行。这个solI[x1][x1] = 2;
应该改成这个solI[x1][y1] = 2;
。也忘了 count
。 max count = 100
会导致维度超过 10 * 10
.