如何在Java中只显示迷宫出口的正确路线



所以我创建了一个迷宫解算器,它可以找到通往终点的路线,但我如何才能做到这一点,如果一条路线通向死胡同,它就会被重写为"空白。下面是我的求解器迷宫方法。

谢谢大家,@Leo Aso的解决方案成功了。

private boolean solveMaze(int coorda, int coordb) { 
return solveMaze(coorda, coordb, 0, 0);
}
private boolean solveMaze(int coorda, int coordb, int dx, int dy) { 
switch (myMaze[coorda][coordb]) {
case '#': case 'X': return false;
case 'E': return true;
}
myMaze[coorda][coordb] = 'X';
if (dx >= 0 && solveMaze(coorda + 1, coordb, +1, 0) || // W
dx <= 0 && solveMaze(coorda - 1, coordb, -1, 0) || // E
dy >= 0 && solveMaze(coorda, coordb + 1, 0, +1) || // S
dy <= 0 && solveMaze(coorda, coordb - 1, 0, -1)) { // N
return true;
}       
myMaze[coorda][coordb] = ' ';
return false;
}

试试这个,看看它是否有效。

private boolean solveMaze(int coorda, int coordb) { 
return solveMaze(coorda, coordb, 0, 0);
}
private boolean solveMaze(int coorda, int coordb, int dx, int dy) { 
switch (myMaze[coorda][coordb]) {
case '#': case 'X': return false;
case 'E': return true;
}
myMaze[coorda][coordb] = 'X';
if (dx >= 0 && solveMaze(coorda + 1, coordb, +1, 0) || // W
dx <= 0 && solveMaze(coorda - 1, coordb, -1, 0) || // E
dy >= 0 && solveMaze(coorda, coordb + 1, 0, +1) || // S
dy <= 0 && solveMaze(coorda, coordb - 1, 0, -1)) { // N
return true;
}       
myMaze[coorda][coordb] = ' ';
return false;
}

你遇到的问题是,你没有确保递归不允许回到它原来的方向。如果你允许这样做,那么所有路径都通向出口,因为转身是有效的移动。这就是dxdy的作用。当你向东/向西时,dx分别为+1/-1,当你向北/向南时,dy分别为-1/+1。if的大声明确保了如果你只是从那里来的话,你不会朝着某个方向走,例如,如果你只是向西走,就不要向东走。

您可以编写一个if语句来理解什么是死胡同。因此,它将主要搜索三个不同方向的"#"。然后,您可能会有一个if语句,其中表示如果deadlend为true,则回溯步骤并删除x值。

最新更新