日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【数据结构与算法 8】递归之迷宫问题

發(fā)布時(shí)間:2024/1/1 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构与算法 8】递归之迷宫问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、簡(jiǎn)介

遞歸就是方法自己調(diào)用自己,每次調(diào)用時(shí)傳入不同的參數(shù),遞歸有利于編程者解決復(fù)雜的問(wèn)題,同時(shí)可以讓代碼變得簡(jiǎn)潔。

二、用一個(gè)例子引出遞歸概念

public static void test(int n){if(n>2){test(n-1);}System.out.println("n="+n); }

打眼一看,很low,很簡(jiǎn)單,4,3,2無(wú)疑。

為了驗(yàn)證我的聰明才智,輸出一把吧

三、遞歸調(diào)用規(guī)則(很重要)

1、執(zhí)行一個(gè)方法時(shí),就創(chuàng)建一個(gè)新的受保護(hù)的獨(dú)立空間(棧空間);

2、方法的局部變量是獨(dú)立的,不會(huì)相互影響,比如變量n;

3、如果方法中使用的是引用類型變量(比如數(shù)組),就會(huì)共享該引用類型的數(shù)據(jù);

4、遞歸必須向退出遞歸的條件逼近,否則就是無(wú)限遞歸,StackOverflowError;

5、當(dāng)一個(gè)方法執(zhí)行完畢,或遇到return,就會(huì)返回,遵守誰(shuí)調(diào)用就將結(jié)果返回給誰(shuí),同時(shí)當(dāng)方法執(zhí)行完畢或return時(shí),該方法也就執(zhí)行完畢。

四、遞歸能解決什么樣的問(wèn)題

1、各種數(shù)學(xué)問(wèn)題

比如八皇后問(wèn)題、哈諾塔、階乘問(wèn)題、迷宮問(wèn)題、球和籃子的問(wèn)題(Google編程大賽)。

2、各種算法中也會(huì)使用遞歸

比如快排、歸并排序、二分查找、分治算法。

3、棧解決的問(wèn)題都可以用遞歸

代碼更加簡(jiǎn)潔。

五、迷宮問(wèn)題

1、代碼實(shí)現(xiàn)

package dataStructure.recursion;public class Labyrinth {public static void main(String[] args) {//迷宮問(wèn)題//0 表示該點(diǎn)沒(méi)有走過(guò) 當(dāng)為 1 表示墻 ; 2 表示通路可以走 ; 3 表示該點(diǎn)已經(jīng)走過(guò),但是走不通int[][] map = new int[8][7];for(int i=0;i<8;i++){for (int j = 0; j < 7; j++) {map[0][j] = 1;map[7][j] = 1;map[i][0] = 1;map[i][6] = 1;}}//設(shè)置擋板, 1 表示map[3][1] = 1;map[3][2] = 1;for (int i = 0; i < 8; i++) {for (int j = 0; j < 7; j++) {System.out.print(map[i][j]+" ");}System.out.println();}setWay(map,1,1);System.out.println("迷宮走過(guò)之后地圖");for (int i = 0; i < 8; i++) {for (int j = 0; j < 7; j++) {System.out.print(map[i][j]+" ");}System.out.println();}}//使用遞歸回溯來(lái)給小球找路//說(shuō)明//1. map 表示地圖//2. i,j 表示從地圖的哪個(gè)位置開(kāi)始出發(fā) (1,1)//3. 如果小球能到 map[6][5] 位置,則說(shuō)明通路找到.//4. 約定: 當(dāng)map[i][j] 為 0 表示該點(diǎn)沒(méi)有走過(guò) 當(dāng)為 1 表示墻 ; 2 表示通路可以走 ; 3 表示該點(diǎn)已經(jīng)走過(guò),但是走不通//5. 在走迷宮時(shí),需要確定一個(gè)策略(方法) 下->右->上->左 , 如果該點(diǎn)走不通,再回溯private static boolean setWay(int[][] map,int i,int j){if(map[6][5] == 2){return true;}else{if(map[i][j]==0){map[i][j] = 2;if(setWay(map,i+1,j)){//下return true;}else if(setWay(map,i,j+1)){//右return true;}else if(setWay(map,i-1,j)){//上return true;}else if(setWay(map,i,j-1)){//左return true;}else{map[i][j] = 3;return false;}}else {return false;}}} }

2、控制臺(tái)輸出

注:1表示墻,2表示你走的路,0表示沒(méi)走的路。

這個(gè)還是挺簡(jiǎn)單的!

?

每一篇博客都是一種經(jīng)歷,程序猿生涯的痕跡,知識(shí)改變命運(yùn),命運(yùn)要由自己掌控,愿你游歷半生,歸來(lái)仍是少年。

欲速則不達(dá),欲達(dá)則欲速!

總結(jié)

以上是生活随笔為你收集整理的【数据结构与算法 8】递归之迷宫问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。