Java遞歸實現(xiàn)迷宮游戲
1.問題由來
迷宮實驗是取自心理學(xué)的一個古典實驗。在該實驗中,把一只老鼠從一個無頂大盒子的門放入,在盒中設(shè)置了許多墻,對行進方向形成了多處阻擋。盒子僅有一個出口,在出口處放置一塊奶酪,吸引老鼠在迷宮中尋找道路以到達出口。對同一只老鼠重復(fù)進行上述實驗,一直到老鼠從入口到出口,而不走錯一步。老鼠經(jīng)多次試驗終于得到它學(xué)習(xí)走迷宮的路線。
2.問題的描述
有一個迷宮地圖,有一些可達的位置,也有一些不可達的位置(障礙、墻壁、邊界)。從一個位置到下一個位置只能通過向上(或者向右、或者向下、或者向左)走一步來實現(xiàn),從起點出發(fā),如何找到一條到達終點的通路。
3.思路分析
本文通過按照約定的策略(比如下->右->上->左)不停的遞歸調(diào)用方法尋找迷宮的出口。從起點出發(fā),每個位置都有四種選擇(上右下左),先選擇一個方向(按約定的順序選擇優(yōu)先方向),如果該方向能夠走下去,那么就往這個方向走,當前位置切換為下一個位置。如果不能走,那么換個方向走,如果所有方向都走不了,那么就回到到上一個位置去。一直這樣執(zhí)行下去,如果當前位置是終點,就退出程序
- 用二維數(shù)組來模擬迷宮地圖
- 1代表墻壁
- 0代表該位置可達。
- 2代表每走過一個位置就將地圖的對應(yīng)位置標記 以免重復(fù)
- 3代表走過這個位置但是走不通
4.代碼實現(xiàn)
public class MiGong { public static void main(String[] args) { int[][] map = new int[8][8]; /** * 初始化迷宮 */ for (int i = 0; i < 8; i++) { map[0][i] = 1; map[7][i] = 1; map[i][0] = 1; map[i][7] = 1; } for (int i = 0; i < 4; i++) { map[3][1+i] = 1; map[5][6-i] = 1; } System.out.println("======迷宮形狀======"); for (int i = 0; i < map.length; i++) { for (int j = 0; j < map[i].length; j++) { System.out.print(map[i][j]+" "); } System.out.println(); } getWay(map,1,1); System.out.println("======行走軌跡======"); for (int i = 0; i < map.length; i++) { for (int j = 0; j < map[i].length; j++) { System.out.print(map[i][j]+" "); } System.out.println(); } } public static boolean getWay(int[][] map,int i,int j){ if (map[6][6] == 2){ //已經(jīng)到達終點 return true; }else { if (map[i][j] == 0){ //當前位置還沒走過 map[i][j] = 2; if (getWay(map,i+1,j)){ //向下走 return true; } if (getWay(map,i,j+1)){ //向右走 return true; } if (getWay(map,i,j-1)){ //向左走 return true; } if (getWay(map,i-1,j)){ //向上走 return true; }else{ map[i][j] = 3; //四邊都走不通 return false; } }else{ //如果不是0就說明過不了或者走過了 return false; } } } }
5.結(jié)果輸出
由于按照下->右->上->左的約定順序取判定下一步是否可走
在到達(4,5)位置時會向向右走黃色的那條路線 當走到(1,2)
位置時四周都不為0即四邊都不可走那么它就會退回到上一個位置
回到(1,3)后發(fā)現(xiàn)四周依舊不可達依此規(guī)則直至回到(4,5)
最終行走的路線就為紅線所示:
按照不同的策略有不同的行走路線
到此這篇關(guān)于Java遞歸實現(xiàn)迷宮游戲的文章就介紹到這了,更多相關(guān)Java實現(xiàn)迷宮游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java定時任務(wù)實現(xiàn)的4種方式小結(jié)
這篇文章主要介紹了java定時任務(wù)實現(xiàn)的4種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09記一次線程爆滿導(dǎo)致服務(wù)器崩潰的問題排查及解決
這篇文章主要介紹了記一次線程爆滿導(dǎo)致服務(wù)器崩潰的問題排查及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進行路由
這篇文章主要介紹了springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進行路由,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10使用Java實現(xiàn)將ppt轉(zhuǎn)換為文本
這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)將ppt轉(zhuǎn)換為文本,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考下2024-01-01java 數(shù)據(jù)庫連接與增刪改查操作實例詳解
這篇文章主要介紹了java 數(shù)據(jù)庫連接與增刪改查操作,結(jié)合實例形式詳細分析了java使用jdbc進行數(shù)據(jù)庫連接及增刪改查等相關(guān)操作實現(xiàn)技巧與注意事項,需要的朋友可以參考下2019-11-11SpringBoot中Zookeeper分布式鎖的原理和用法詳解
Zookeeper是一個分布式協(xié)調(diào)服務(wù),它提供了高可用、高性能、可擴展的分布式鎖機制,SpringBoot是一個基于Spring框架的開發(fā)框架,它提供了對Zookeeper分布式鎖的集成支持,本文將介紹SpringBoot中的 Zookeeper分布式鎖的原理和使用方法,需要的朋友可以參考下2023-07-07