所以这段代码应该通过地图来查找目的地,并从起点开始:
##########
S ##
## #######
## ### #
## ###
###### # #
## # #
## ##### #
## D
##########
如果有2个或更多可用路径并且可以行走,我基本上会有递归调用。 (我只显示2个方向的代码)
public static String maze (String[][] map, int row, int col){
// mark current spot as done
map[row][col] = "-1";
boolean up = false;
boolean down = false;
boolean right = false;
boolean left = false;
int total = 0;
// check which adjacent boxes are free
if (map[row - 1][col].equals(" ")) up = true;
if (map[row + 1][col].equals(" ")) down = true;
if (map[row][col + 1].equals(" ")) right = true;
if (map[row][col - 1].equals(" ")) left = true;
// base case
if (map[row][col].equals("D")){
return "complete";
// 2 directions
if (up == true && right == true){
return maze(map, row - 1, col) + maze(map, row, col + 1);
} else if (up == true && down == true){
return maze(map, row - 1, col) + maze(map, row + 1, col); // only runs the first portion (i.e. maze(map, row - 1, col))
} else if (up == true && left == true){
return maze(map, row - 1, col) + maze(map, row, col - 1);
} else if (right == true && down == true){
return maze(map, row, col + 1) + maze(map, row + 1, col);
} else if (right == true && left == true){
return maze(map, row, col + 1) + maze(map, row, col - 1);
} else if (down == true && left == true){
return maze(map, row + 1, col) + maze(map, row, col - 1);
} else {
return "false";
}
}
现在它只打印" false"当它只运行上面指出的一个呼叫时。此外,代码在返回false时终止。
那么我应该做些什么来完成"完成"因为在这个图中可以到达终点。或者我如何声明我的递归语句,以便在程序返回后保持程序运行" false"这样它最终会达到"完成"。
答案 0 :(得分:1)
我没有运行你的代码,但是阅读它我怀疑一个关键问题是你拥有的互斥条件。
您的代码为:
if(condition 1) {
//recursion path A
} else if(condition 2) {
//recursion path B
}
这引出了一些问题:当这些条件中的多个条件成立时,该代码如何表现?它将始终只执行第一个条件,并跳过其余条件。