Итак, я пишу программу, которая заставляет робота исследовать лабиринт, чтобы найти указанную пещеру. Есть четыре типа ячеек: Пещера, Старт, Стена и Проход. Роботы могут двигаться только в проход или пещеру. Я реализовал свой метод так, чтобы робот не мог переместиться в посещаемую ячейку или выйти за ее пределы. Но как только он перемещается в ячейку, где нет допустимой соседней ячейки, программа останавливается. Итак, как мне заставить моего робота вернуться туда, где есть действительная ячейка? Я использую рекурсию для этого. Ниже мой код. Любая помощь будет отличной. Благодарю вас!
public void explore (Cell cavern, Maze maze) throws InterruptedException {
// for debugging
System.out.println(row + " " + col);
System.out.println(cavern.getRow() + " " + cavern.getCol());
System.out.println(visited.toString());
TimeUnit.MILLISECONDS.sleep(10); // delay program
//base case
if (row == cavern.getRow() && col == cavern.getCol()) {
foundCavern = true;
return;
}
else {
// move right
if ((col+1) < maze.getNumCols() && !visited.contains(maze.getCell(row, col+1)) && (maze.getCell(row, col+1).isPassage() || maze.getCell(row, col+1).isCavern())) {
visited.add(maze.getCell(row, col+1));
setRobotLocation(row,col+1);
explore(cavern, maze);
}
// move down
else if ((row+1) < maze.getNumRows() && !visited.contains(maze.getCell(row+1, col)) && (maze.getCell(row+1, col).isPassage() || maze.getCell(row+1, col).isCavern())) {
visited.add(maze.getCell(row+1, col));
setRobotLocation(row+1,col);
explore(cavern, maze);
}
// move left
else if ((col-1) >= 0 && !visited.contains(maze.getCell(row, col-1)) && (maze.getCell(row, col-1).isPassage() || maze.getCell(row, col-1).isCavern())) {
visited.add(maze.getCell(row, col-1));
setRobotLocation(row,col-1);
explore(cavern, maze);
}
// move up
else if ((row-1) >= 0 && !visited.contains(maze.getCell(row-1, col)) && (maze.getCell(row-1, col).isPassage() || maze.getCell(row-1, col).isCavern())) {
visited.add(maze.getCell(row-1, col));
setRobotLocation(row-1,col);
explore(cavern, maze);
}
else {
foundCavern = false;
return;
}
}
}
else
и вместо этого проверить, нужно ли вам также продолжать движение в других направлениях, что означает, что когда вы вернетесь сexplore
вызова, вы все еще не нашли пещеру. - person benji   schedule 23.11.2014