したがって、このコードはそうのように目的地と出発点からを見つけるためにマップを介して実行することになっている。そこに2つの以上の利用可能な経路であり、それは旅することが可能かどう2番目の再帰文は実行されませんか?
##########
S ##
## #######
## ### #
## ###
###### # #
## # #
## ##### #
## D
##########
は基本的に私は、再帰呼び出しを持っています。それだけで上記に示した呼び出しのいずれかを実行しますとき今それが唯一の「偽」の印刷だ
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";
}
}
(私は2つの方向のためのコードを示しています)。また、falseを返すときにコードは終了します。
だから、この図の最後に到達することができるので、私は "完了"するために何をすべきですか?または、私はどのように私は最終的に "完全"に達するように "偽"を返した後にもプログラムを続けるように私の再帰文を宣言しますか?
'if(up == true && right == true)'この式では何もあなたに奇妙に見えませんか? 'up'が真の場合、LHSの代入は真です。ちょうど 'up && right'を使ってください。 – Nathan
ようこそスタックオーバーフロー! [あなたのステップデバッガはあなたに何を伝えますか?](http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems) –
もし私がD –