我正在使用所谓的深度优先搜索来使用我自己的Stack创建的类来解决迷宫。我相信我收到此错误的原因是因为我的程序永远不会满足finishSpot
条件。我使用了调试器,看起来它在finishSpot
之前无限地停留在Point处。我的逻辑似乎大多是正确的,除非我的迷宫求解器试图完成迷宫,所以我只需要帮助满足导致程序崩溃的最后一个条件。
这是一个样本迷宫,其中's'开始,'f'结束,'*'是墙。
*****
*s* *
* * *
* f*
*****
这是我的Main,它使用我的LinkedStack类,如果需要我可以发布。
//Creates a Stack and determines the start and endpoints.
public static void solveDFS( char [][] maze ){
LinkedStack stack = new LinkedStack();
Point currentSpot = findPoint( maze,'s' );
Point finishSpot = findPoint( maze, 'f' );
findPath( maze,currentSpot, finishSpot,stack );
}
//Finds a point by searching for a char.
private static Point findPoint( char [][] maze, char c ) {
for ( int i = 0; i < maze.length; i++ ) {
for ( int j = 0; j < maze[i].length; j++ ) {
if ( maze[i][j] == c ) {
return new Point(i, j);
}
}
}
return null;
}
//Search algorithm looks for all neighbor locations
private static boolean findPath( char [][] maze, Point currentSpot, Point finishSpot, LinkedStack stack ){
boolean hasSolution = false;
stack.push(currentSpot);
while( currentSpot != finishSpot && !stack.isEmpty() ){
// Checks Right
if( currentSpot.x < maze.length ){
if( maze[currentSpot.x + 1][currentSpot.y] == ' '){
stack.push(new Point( currentSpot.x + 1, currentSpot.y ));
}
}
// Checks Left
if( currentSpot.x > 0 ){
if( maze[currentSpot.x - 1][currentSpot.y] == ' '){
stack.push(new Point( currentSpot.x - 1, currentSpot.y ));
}
}
// Checks Up
if( currentSpot.y > 0 ){
if( maze[currentSpot.x][currentSpot.y - 1] == ' ' ){
stack.push(new Point( currentSpot.x, currentSpot.y - 1));
}
}
// Checks Down
if( currentSpot.y < maze[currentSpot.x].length ){
if( maze[currentSpot.x][currentSpot.y + 1] == ' '){
stack.push(new Point( currentSpot.x, currentSpot.y + 1));
}
}
// Checks Finish (My program never meets this condition help!)
if( currentSpot == finishSpot ){
printMaze(maze);
hasSolution = true;
}
currentSpot = stack.pop();
findPath( maze, currentSpot, finishSpot, stack );
}
return hasSolution;
}
答案 0 :(得分:0)
在您的代码中,以下条件永远不会同时为真
while( currentSpot != finishSpot && !stack.isEmpty() ){
...
if( currentSpot == finishSpot ){
答案 1 :(得分:0)
我认为你不能比较Points
这样的变量。
尝试覆盖方法equals