該文章主要是介紹兩個遞歸的demo(迷宮問題和八皇后)git
迷宮問題github
/** * @desc 迷宮問題 * 1.初始化一個8行7列的矩陣 map[8][7] * 2.假設: * (1)三種類型:0-尚未走,1-檔板,2-能夠走(已走),3-走不通 * (2)策略:下-》右-》下-》左 * (3)初始值:周圍都是1 * 3.過程分析: * (1)已經找到(肯定找到的條件:第7行6列即爲找到 =》 [6,5]=2) * (2)尚未找到按策略去找 * * @Author xw * @Date 2019/9/3 */ public class MingGong { public static void main(String[] args) { // 1.初始化一個8行7列的矩陣arr[8][7] int[][] map = new int[8][7]; // 2.初始值:周圍都是1 // 第1行和第8行設置檔板 for (int j = 0; j < 7; j++) { map[0][j] = 1; map[7][j] = 1; } // 第1列和第7列設置檔板 for (int i = 0; i < 8; i++) { map[i][0] = 1; map[i][6] = 1; } // 輸出矩陣 print(map); System.out.println("-------------------------"); // 設置檔板 [3,1]=1,[3,2]=1 map[3][1] = 1; map[3][2] = 1; print(map); // 策略:下-》右-》上-》左 setWay(map, 1, 1); // 從[1,1]這個位置開始 System.out.println("策略:下-》右-》上-》左 =>"); print(map); } }
八皇后算法
/** * @desc 8皇后問題 * 1.是什麼? * 8x8的矩陣,任意兩個位置不能處於同一行、同一列或同一斜線,能找出多少種解法,這就是8皇后問題 * 2.思路分析 * (1)第一個皇后放第一行第一列[0,0] * (2)第二個皇后放第二行第一列[1,0]...直到判斷ok, * 若是不ok,繼續放在第二列、第三列、依次把全部列放完,找到一個合適位置 * (3)繼續第三個皇后,仍是第一列、第二列...直到第8個皇后也放在一個不衝突的位置, * 算是找到一個正確解 * (4)當獲得一個正確解時,在棧回退到上一個棧時,就會開始回溯,即將第一個皇后,放在第一列的全部正確解,所有獲得 * (5)而後回頭繼續第一個皇后放第二列,後面繼續循環執行1-4步驟 * 3.說明 * 理論上建立一個二維數組來表示一個棋盤,但實際上能夠經過算法, * 用一個一維數組便可解決 arr[8] = {0, 4, 7, 5, 2, 6, 1, 3} * // arr[0] = 0 表示第1個皇后(第一行)放在第1列,即[0,0] * // arr[1] = 4 表示第2個皇后(第二行)放在第5列,即[1,4] * 下標表示第幾行 即第幾個皇后 * arr[i] = val,val表示第i+1個皇后放在第i+1行的第val+1列 * @Author xw * @Date 2019/9/4 */ public class Queen8 { private int max; private int[] arr; private int count; public Queen8(int max) { this.max = max; this.arr = new int[max]; } public static void main(String[] args) { for (int i = 0; i < 8; i++) { System.out.print(String.format("R%s\t", i+1)); } System.out.println(); Queen8 queen8 = new Queen8(8); queen8.check(0); System.out.println(String.format("共有%s種解法", queen8.count)); } }
gitee地址:https://gitee.com/linestyle007/jucdemo2數組
博客地址:https://linestyle007.gitee.io/this
github地址:https://github.com/line007/jucdemo2spa