java複習之遞歸篇+迷宮回溯問題(一)

java複習之遞歸篇

遞歸的規則:
執行一個方法的時候,創建一個新的受保護的棧空間
方法的局部變量是獨立德 ,不會相互影響(引用類型的會被共享)
遞歸必須向退出遞歸的條件逼近,否則就是無限遞歸
當一個方法執行完,或者遇到return,就會返回,遵守誰調用,就將結果返回給誰 ,當方法執行完畢或者返回時,該方法也就執行完畢了
先上第一個例題,迷宮尋路,用回溯法

package learn;

/**
 * 迷宮小球尋路問題
 */
public class MiGong {
    /**
     *
     * 設定規則,先下,再右,再上在左,小球尋路規則,到達map[6][5],說明找到,經過的路設置爲2,可以走通,走過但是走不通設置爲3
     *
     * @param map 傳入的數組
     * @param i 行號  當前位置
     * @param j 列號  當前位置
     * @return
     */
    public static boolean setWay(int[][] map,int i,int j){
        if(map[6][5]==2){
            return true;
        }else{
            if(map[i][j]==0){
                map[i][j]=2;
                if(setWay(map,i+1,j)){
                    return true;
                }else if(setWay(map,i,j+1)){
                    return true;
                }else if(setWay(map,i-1,j)){
                    return true;
                }else if(setWay(map,i,j-1)){
                    return true;
                }else {
                    map[i][j]=3;
                    return false;
                }
            }else{
                return false;
            }
        }

    }
    public static void main(String[] args) {
        int[][] map = new int[8][7];
        for(int i=0;i<7;i++){
            map[0][i]=1;
            map[7][i]=1;
        }
        for(int i=0;i<8;i++){
            map[i][0]=1;
            map[i][6]=1;
        }
        map[3][1]=1;
        map[3][2]=1;
        for(int i=0;i<8;i++){
            for(int j=0;j<7;j++){
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println("==============");
        setWay(map,1,1);
        for(int i=0;i<8;i++){
            for(int j=0;j<7;j++){
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章