我有一个程序,读取从文件中的迷宫,并把它变成一个二维数组和导航的方式,虽然使用递归,并放置一个P到处它一直和V每其中两次。在我的算法的某个地方有一个问题,导致迷宫只有Vs.我已经输入了许多println
语句来尝试调试该问题。我是Java的新手,我可能错过了一些明显的东西,但我无法找到我生活中的问题。迷宫遍历算法递归
迷宫代码:
public static boolean goNorth(){
boolean success;
if(maze[currCol][currRow - 1] == CLEAR){
currRow = currRow - 1;
maze[currCol][currRow] = PATH;
if (maze[currCol][currRow] == maze[finishCol][finishRow]){
success = true;
} else {
success = goNorth();
if(!success){
success = goWest();
if(!success){
success = goEast();
if(!success){
maze[currCol][currRow] = VISITED;
currRow = currRow + 1;
}
}
}
}
} else {
success = false;
}
return success;
}
public static boolean goWest(){
boolean success;
if(maze[currCol - 1][currRow] == CLEAR){
currCol = currCol - 1;
maze[currCol][currRow] = PATH;
if (maze[currCol][currRow] == FINISH){
success = true;
} else {
success = goWest();
if(!success){
success = goSouth();
if(!success){
success = goNorth();
if(!success){
maze[currCol][currRow] = VISITED;
currCol = currCol + 1;
}
}
}
}
} else {
success = false;
}
return success;
}
public static boolean goEast(){
boolean success;
if(maze[currCol + 1][currRow] == CLEAR){
currCol = currCol + 1;
maze[currCol][currRow] = PATH;
if (maze[currCol][currRow] == FINISH){
success = true;
} else {
success = goEast();
if(!success){
success = goNorth();
if(!success){
success = goSouth();
if(!success){
maze[currCol][currRow] = VISITED;
currCol = currCol - 1;
}
}
}
}
} else {
success = false;
}
return success;
}
public static boolean goSouth(){
boolean success;
if(maze[currCol][currRow + 1] == CLEAR){
currRow = currRow + 1;
maze[currCol][currRow] = PATH;
if (maze[currCol][currRow + 1] == FINISH){
success = true;
} else {
success = goSouth();
if(!success){
success = goEast();
if(!success){
success = goWest();
if(!success){
maze[currCol][currRow] = VISITED;
currRow = currRow - 1;
}
}
}
}
} else {
success = false;
}
return success;
}
所需的输出:
xxxxxxxxxxxxxxxxxxFx
xVVVVVxPPPPPPPxxxxPx
xVxxxxxPxxxxxPPPxxPx
xVxxxxxPxxxxxxxPxxPx
xVVVVVVPPPPPPxxPxxPx
xVxxxxxxxxxxPxxPPPPx
xxxxxxxxxxxxSxxxxxxx
输出我得到:
xxxxxxxxxxxxxxxxxxVx
xVVVVVxVVVVVVVxxxxVx
xVxxxxxVxxxxxVVVxxVx
xVxxxxxVxxxxxxxVxxVx
xVVVVVVVVVVVVxxVxxVx
xVxxxxxxxxxxVxxVVVVx
xxxxxxxxxxxxSxxxxxxx
KyleM的调试建议很好。另外,你已经写了4个非常非常相似的函数。有什么方法可以重写代码以减少重复吗?除了让你的代码更易于阅读和维护之外,像这样凝结你的代码常常会使错误更加明显。 – 2013-04-26 03:52:58