1. 程式人生 > 其它 >Java中的遞迴函式例項——小老鼠走迷宮

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; } } }