2017-10-30 18 views
-1

したがって、このコードはそうのように目的地と出発点からを見つけるためにマップを介して実行することになっている。そこに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を返すときにコードは終了します。

だから、この図の最後に到達することができるので、私は "完了"するために何をすべきですか?または、私はどのように私は最終的に "完全"に達するように "偽"を返した後にもプログラムを続けるように私の再帰文を宣言しますか?

+2

'if(up == true && right == true)'この式では何もあなたに奇妙に見えませんか? 'up'が真の場合、LHSの代入は真です。ちょうど 'up && right'を使ってください。 – Nathan

+0

ようこそスタックオーバーフロー! [あなたのステップデバッガはあなたに何を伝えますか?](http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems) –

+0

もし私がD –

答えて

1

私はあなたのコードを実行していませんが、私はあなたが持っている相互に排他的な条件の1つの重大な問題であると考えています。

あなたのコードが読み取ります

質問に頼む
if(condition 1) { 
    //recursion path A 
} else if(condition 2) { 
    //recursion path B 
} 

:どのようにこれらの条件の2つ以上が該当する場合、このコード振る舞いますか?常に最初の条件を実行し、残りはスキップします。

+0

あなたのコメントのためのthx私はそれを考え出した:) – cuzynot

関連する問題