欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)據(jù)結(jié)構(gòu) 遞歸之迷宮回溯案例講解

 更新時(shí)間:2021年08月03日 09:19:17   作者:去吧貓頭夜鷹  
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)遞歸之迷宮回溯案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

問(wèn)題介紹:

用二維數(shù)組表示一個(gè)迷宮,設(shè)置迷宮起點(diǎn)和終點(diǎn),輸出迷宮中的一條通路

實(shí)現(xiàn)思路:

二維數(shù)組表示迷宮:

0表示路且未走過(guò)、1表示墻、2表示通路,3表示已經(jīng)走過(guò)但走不通

設(shè)置尋路方法setWay,傳入地圖和坐標(biāo)參數(shù)

默認(rèn)方向策略:下、右、上、左

假定傳入的店沒(méi)有走過(guò)且可以走通,將其值置為2,然后向下尋路,也就是將坐標(biāo) (i + 1, j) 傳入尋路方法中

進(jìn)行遞歸尋路,向下移動(dòng)后,再次按照方向策略進(jìn)行尋路,即再向下尋路,直到遇到死路,即下右左均走不通(因?yàn)閷⒆哌^(guò)的路置為2,故向上也走不通,即遇到死路時(shí)回頭不算通路),則將該點(diǎn)置為3,并返回false,回到上一個(gè)遞歸,找尋方向策略中剩下的方向,實(shí)現(xiàn)回溯

代碼實(shí)現(xiàn):

public class Maze {
	public static void main(String[] args) {
		maze();
	}
	//迷宮回溯問(wèn)題
	public static void maze() {
		//創(chuàng)建二維數(shù)組模擬迷宮
		//使用1表示墻,0表示路
		int[][] map = new int[][]{
				{1, 1, 1, 1, 1, 1, 1},
				{1, 0, 0, 0, 0, 0, 1},
				{1, 0, 1, 0, 0, 0, 1},
				{1, 0, 1, 0, 1, 1, 1},
				{1, 1, 0, 0, 0, 0, 1},
				{1, 0, 1, 1, 0, 1, 1},
				{1, 0, 0, 0, 0, 0, 1},
				{1, 1, 1, 1, 1, 1, 1}
		};
		//輸出地圖
		System.out.println("迷宮:");
		for (int[] row : map) {
			for (int i : row) {
				System.out.printf("%d\t", i);
			}
			System.out.println();
		}
		System.out.println("尋路結(jié)果:");
		//開(kāi)始尋路
		setWay(map, 1, 1);
		//輸出地圖
		for (int[] row : map) {
			for (int i : row) {
				System.out.printf("%d\t", i);
			}
			System.out.println("");
		}
 
	}
 
	//傳入地圖map
	//傳入開(kāi)始位置(i, j)
	//如果能到達(dá)右下角(6, 5),則說(shuō)明找到通路
	//0表示未走過(guò),1表示墻,2表示可以走的通路,3表示已經(jīng)走過(guò),但是走不通
	//確定方向策略:下 -> 右 -> 上 -> 左
	//若該點(diǎn)走不通,則回溯
	public static boolean setWay(int[][] map, int i, int j) {
		if (map[6][5] == 2) {
			//通路已經(jīng)找到
			return true;
		} else {
			if (map[i][j] == 0) {
				//如果當(dāng)前點(diǎn)沒(méi)有走過(guò)
				map[i][j] = 2;    //假定該點(diǎn)可以走通
				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 {
					//該點(diǎn)走不通
					map[i][j] = 3;
					return false;
				}
			} else {
				//如果map[i][j] != 0
				//可能是1、2、3
				return false;
			}
		}
	}
}

輸出結(jié)果:

迷宮:
1	1	1	1	1	1	1	
1	0	0	0	0	0	1	
1	0	1	0	0	0	1	
1	0	1	0	1	1	1	
1	1	0	0	0	0	1	
1	0	1	1	0	1	1	
1	0	0	0	0	0	1	
1	1	1	1	1	1	1	
尋路結(jié)果:
1	1	1	1	1	1	1	
1	2	2	2	0	0	1	
1	3	1	2	0	0	1	
1	3	1	2	1	1	1	
1	1	0	2	2	0	1	
1	0	1	1	2	1	1	
1	0	0	0	2	2	1	
1	1	1	1	1	1	1	

到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之遞歸之迷宮回溯案例講解的文章就介紹到這了,更多相關(guān)Java數(shù)據(jù)結(jié)構(gòu)之遞歸之迷宮回溯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vscode中不再支持JDK8的原因分析及解決方案

    Vscode中不再支持JDK8的原因分析及解決方案

    這篇文章主要介紹了Vscode中不再支持JDK8的解決方案,本文給大家分享三種解決方案,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • MyBatis-Plus自定義SQL的詳細(xì)過(guò)程記錄

    MyBatis-Plus自定義SQL的詳細(xì)過(guò)程記錄

    Java開(kāi)發(fā)使用mybatis-plus來(lái)執(zhí)行sql操作,往往比mybatis能夠省時(shí)省力,下面這篇文章主要給大家介紹了關(guān)于MyBatis-Plus自定義SQL的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 解析使用jdbc,hibernate處理clob/blob字段的詳解

    解析使用jdbc,hibernate處理clob/blob字段的詳解

    本篇是對(duì)使用jdbc,hibernate處理clob/blob字段進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • file.mkdir()、file.mkdirs()和file.createNewFile()的區(qū)別

    file.mkdir()、file.mkdirs()和file.createNewFile()的區(qū)別

    本文主要介紹了file.mkdir()、file.mkdirs()和file.createNewFile()的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java、C++中子類對(duì)父類函數(shù)覆蓋的可訪問(wèn)性縮小的區(qū)別介紹

    Java、C++中子類對(duì)父類函數(shù)覆蓋的可訪問(wèn)性縮小的區(qū)別介紹

    這篇文章主要給大家介紹了關(guān)于Java、C++中子類對(duì)父類函數(shù)覆蓋的可訪問(wèn)性縮小的區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • SpringBoot創(chuàng)建監(jiān)聽(tīng)器的方法示例

    SpringBoot創(chuàng)建監(jiān)聽(tīng)器的方法示例

    在Java中,監(jiān)聽(tīng)器(Listener)是一種設(shè)計(jì)模式,它允許對(duì)象在 特定事件 發(fā)生時(shí) 自動(dòng)執(zhí)行某些操作,這種設(shè)計(jì)模式通常用于實(shí)現(xiàn) 發(fā)布-訂閱模型,本文給大家介紹了SpringBoot創(chuàng)建監(jiān)聽(tīng)器的方法示例,感興趣的通過(guò)可以參考一下
    2024-04-04
  • 微信java開(kāi)發(fā)之實(shí)現(xiàn)微信主動(dòng)推送消息

    微信java開(kāi)發(fā)之實(shí)現(xiàn)微信主動(dòng)推送消息

    這篇文章主要介紹了微信開(kāi)發(fā)過(guò)程中的使用java實(shí)現(xiàn)微信主動(dòng)推送消息示例,需要的朋友可以參考下
    2014-03-03
  • java實(shí)現(xiàn)可視化日歷

    java實(shí)現(xiàn)可視化日歷

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)可視化日歷,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringCloud將Nacos作為配置中心實(shí)現(xiàn)流程詳解

    SpringCloud將Nacos作為配置中心實(shí)現(xiàn)流程詳解

    這篇文章主要介紹了Springcloud中的Nacos Config服務(wù)配置,本文以用戶微服務(wù)為例,進(jìn)行統(tǒng)一的配置,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解

    Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解

    這篇文章主要介紹了Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論