目錄使用遞迴解決迷宮問題
遞迴需要遵守的重要規則
迷宮問題示意圖:
**實現:
package com.atguigu.recursion;
public class migong
// 左右全部置為1
for (int i = 0; i < 8; i++)
//設定擋板, 1 表示
map[3][1] = 1;
map[3][2] = 1;
// map[1][2] = 1;
// map[2][2] = 1;
// 輸出地圖
system.out.println("地圖的情況");
for (int i = 0; i < 8; i++)
system.out.println();
} //使用遞迴回溯給小球找路
//setway(map, 1, 1);
setway2(map, 1, 1);
//輸出新的地圖, 小球走過,並標識過的遞迴
system.out.println("小球走過,並標識過的 地圖的情況");
for (int i = 0; i < 8; i++)
system.out.println();
} }
//使用遞迴回溯來給小球找路
//說明
//1. map 表示地圖
//2. i,j 表示從地圖的哪個位置開始出發 (1,1)
//3. 如果小球能到 map[6][5] 位置,則說明通路找到.
//4. 約定: 當map[i][j] 為 0 表示該點沒有走過 當為 1 表示牆 ; 2 表示通路可以走 ; 3 表示該點已經走過,但是走不通
//5. 在走迷宮時,需要確定乙個策略(方法) 下->右->上->左 , 如果該點走不通,再回溯
/***
* @param map 表示地圖
* @param i 從哪個位置開始找
* @param j
* @return 如果找到通路,就返回true, 否則返回false
*/public static boolean setway(int map, int i, int j) else else if (setway(map, i, j+1)) else if (setway(map, i-1, j)) else if (setway(map, i, j-1)) else
} else
} }//修改找路的策略,改成 上->右->下->左
public static boolean setway2(int map, int i, int j) else else if (setway2(map, i, j+1)) else if (setway2(map, i+1, j)) else if (setway2(map, i, j-1)) else
} else
} }}
演算法學習 遞迴之漢諾塔
漢諾塔問題 如下圖所示,從左到右有a b c三根柱子,其中a柱子上面有從小疊到大的n個圓盤,現要求將a柱子上的圓盤移到c柱子上去,期間只有乙個原則 一次只能移到乙個盤子且 子不能在小盤子上面,求移動的步驟和移動的次數 1個盤的時候,只需要移動1次即可達成目標,g 1 1 步驟一 2個盤的時候,需要移...
演算法學習第五日之用棧實現綜合計算器(中綴表示式)
目錄棧實現綜合計算器 中綴表示式 ps 要考慮到輸入的數字字元不止一位的問題 演算法思路 實現 package com.atguigu.stack public class calculator else else else else 讓index 1,並判斷是否掃瞄到expression最後.in...
演算法學習筆記(三) 遞迴之N皇后
通過上一次的學習可以知道,如果要實現乙個遞迴函式,那麼必須要有兩個東西。遞迴邊界和遞迴式。遞迴邊界用於返回最簡單的底層的結果。遞迴式用於減小資料規模並向下一層遞迴。其實學到這裡才發現,遞迴才是計算機思維,雖然說起來簡單,但是正常人的思維模式是不按照遞迴走的。今天要研究的是n皇后問題,是回溯演算法的典...