再帰は、問題を解決 - 迷路

アイデアは、再帰ループの裁判官を使用することですが、出口への道を見つけました

パブリック クラスMiGong {
     公共 静的 ボイドメイン(文字列[]引数){
         // 地图
        のint [] []にマッピング= 新しい INT [8] [7 ]。
        // 
        ためINT I = 0、I <7; I ++ ){ 
            地図[ 0] [I] = 1 
            地図[ 7] [I] = 1 
        } 
        のためのINT ; I <8 I ++ iは1 = {)
            マップ[i]が[ 0] = 1 ; 
            地図[I] [ 6] = 1 
        } 
        マップ[3] [1] = 1。。 
        地図[ 3] [2] = 1。。 
        マップ[ 1] [2] = 1。。 
        マップ[ 2] [2] = 1 ;
         // 出力マップ
        INT I; I = 0 <8; I ++ ){
             ためINT J = 0; J <7; J ++ ){ 
                System.out.print(マップ[I] [J]の + "" ); 
            } 
            のSystem.out.println(); 
        } 
        システム。 out.printlnを(); 
        // 双方向見つけるための再帰的なバックトラック 
        setWay(地図、1、1 );
         のためint型を0 = I; I <8; I ++ ){
             ためINT J = 0; J <7; J ++ ){ 
                System.out.print(地図の[I] [J] + "" ); 
            } 
            のSystem.out.println( ); 
        } 
    } 

    // 1から0は2に示す3行き止まりを表す通過することができない壁を表していない

    / ** 
     * @param マップマップ
     * @param iは開始位置
     * @param Jを
     * @return true、そうでないリターンを見つけますfalseに
      * / 
    パブリック 静的 ブール setWay(INT [] []地図、int型の I、int型J){
         場合(地図[6] [5] == 2 ){
             戻り 
        } {
             場合(地図[I] [J] == 0 ){ 
                マップ[I] [J] = 2 ;
                もし(setWay(マップ、iが+ 1 、J)){
                     戻り 
                } 他の 場合(setWay(マップ、I、J + 1 )){
                     戻り 
                } そう であれば(setWay(マップ、I - 1 、J)){
                    返す ; 
                } 他の 場合(setWay(マップ、I、J - 1 )){
                     戻り 
                } { 
                    マップ[I] [J] = 3 ;
                    リターン はfalse ; 
                } 
            } {
                 戻り 
            } 
        } 
    } 
}

おすすめ

転載: www.cnblogs.com/bingbug/p/12090914.html