演算法學習第五日之使用遞迴解決迷宮問題

2022-07-10 10:21:14 字數 1650 閱讀 8108

目錄使用遞迴解決迷宮問題

遞迴需要遵守的重要規則

迷宮問題示意圖:

**實現:

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皇后問題,是回溯演算法的典...