Java中的遞歸函數實例——小老鼠走迷宮


思路分析:

 1.應先用一個二維數組創造出一個迷宮;用0表示可以走;1表示障礙物; 2. 觀察本圖可以發現,第一行和最后一行均為障礙,第一列和最后一列均為障礙

     3.觀察第四行前三列也均為障礙

 4.輸出該地圖

5.創建一個類,並用遞歸回溯思想解決老鼠出迷宮問題
 6.創建一個布爾類型的findWay方法 ,true表示找到,false表示沒有找到
7.傳入一個二維數組,並用i,j 表示當前位置,初始位置是(1,1)
 8.規定二維數組各個數值的意義:
0 可以走但沒走過 1 障礙物 2 可以走通 3 可以走但是走不通

9.開始利用遞歸回溯寫代碼
/*思路分析:

      1.應先用一個二維數組創造出一個迷宮;用0表示可以走;1表示障礙物;

      2. 觀察本圖可以發現,第一行和最后一行均為障礙,第一列和最后一列均為障礙,於是代碼實現如下*/
int[][] map = new int[8][7];
        for(int i = 0;i<7;i++){
            map[0][i] = 1;
            map[7][i] = 1;
        }
        for (int j = 0;j<8;j++){
            map[j][0]=1;
            map[j][6]= 1;
        }
 //3.觀察第四行前三列也均為障礙於是代碼如下
map[3][1] = 1;
map[3][2] = 1;
//4.輸出該地圖
for (int i = 0;i<map.length;i++){
            for (int j = 0;j<map[i].length;j++){
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }
//5.創建一個類,並用遞歸回溯思想解決老鼠出迷宮問題
//6.創建一個布爾類型的findWay方法 ,true表示找到,false表示沒有找到
//7.傳入一個二維數組,並用i,j 表示當前位置,初始位置是(1,1),代碼實現如下
class T{
    public boolean findway( int map[][],int i,int j){
        
    }

}
//8.規定二維數組各個數值的意義:0 可以走但沒走過 1 障礙物 2 可以走通  3 可以走但是走不通
//9.開始利用遞歸回溯寫代碼
class T{
    public boolean findway( int map[][],int i,int j){
        if(map[6][5] == 2){/*如果數組的值等於2則證明走出了迷宮,返回一個真*/
            return true;
        }
        if(map[i][j]==0){//如果數組值等於0,則可以走但沒走過
            map[i][j] = 2;/*令數組值等於2並不斷嘗試找路,找路策略為下—>右—> 左—>上(tips:找路策略會影響其走出迷宮的路徑因此可以思考怎么樣才能找出最短路徑)*/
            if (findway(map,i+1,j)){
                return true;
            }else if (findway(map,i,j+1)){
                return true;
            }else if (findway(map, i, j-1)){
                return true;
            }else if (findway(map, i-1, j)){
                return true;
            }else {
                map[i][j] =3;
                return false;
            }
        }else{/*如果數組值不等於0,為1,2,3則說明不能走返回一個false*/
            return false;
        }
    }
//10.輸出找路后的數組
        T p1 = new T();
        p1.findway(map,1,1);
        System.out.println("找路后的情況");
        for (int i = 0;i<map.length;i++){
            for (int j = 0;j<map[i].length;j++){
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }
//11.全部代碼如下:
public class Migong {
    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 j = 0;j<8;j++){
            map[j][0]=1;
            map[j][6]= 1;
        }
        map[3][1] = 1;
        map[3][2] = 1;
        for (int i = 0;i<map.length;i++){
            for (int j = 0;j<map[i].length;j++){
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }
        T p1 = new T();
        p1.findway(map,1,1);
        System.out.println("找路后的情況");
        for (int i = 0;i<map.length;i++){
            for (int j = 0;j<map[i].length;j++){
                System.out.print(map[i][j]+" ");
            }
            System.out.println();
        }
    }
}
class T{
    public boolean findway( int map[][],int i,int j){
        if(map[6][5] == 2){
            return true;
        }
        if(map[i][j]==0){
            map[i][j] = 2;
            if (findway(map,i+1,j)){
                return true;
            }else if (findway(map,i,j+1)){
                return true;
            }else if (findway(map, i, j-1)){
                return true;
            }else if (findway(map, i-1, j)){
                return true;
            }else {
                map[i][j] =3;
                return false;
            }
        }else{
            return false;
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM