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

Java遞歸實(shí)現(xiàn)迷宮游戲

 更新時(shí)間:2022年01月24日 17:34:11   作者:HairLossException  
這篇文章主要介紹了如何利用Java遞歸方法實(shí)現(xiàn)迷宮游戲,下面文章會(huì)詳細(xì)的從為問題描述開始,清晰的解題思路以及詳細(xì)的代碼實(shí)現(xiàn),具有一定的參考價(jià)值,需要的小伙伴可以參考一下

1.問題由來

迷宮實(shí)驗(yàn)是取自心理學(xué)的一個(gè)古典實(shí)驗(yàn)。在該實(shí)驗(yàn)中,把一只老鼠從一個(gè)無頂大盒子的門放入,在盒中設(shè)置了許多墻,對行進(jìn)方向形成了多處阻擋。盒子僅有一個(gè)出口,在出口處放置一塊奶酪,吸引老鼠在迷宮中尋找道路以到達(dá)出口。對同一只老鼠重復(fù)進(jìn)行上述實(shí)驗(yàn),一直到老鼠從入口到出口,而不走錯(cuò)一步。老鼠經(jīng)多次試驗(yàn)終于得到它學(xué)習(xí)走迷宮的路線。

2.問題的描述

有一個(gè)迷宮地圖,有一些可達(dá)的位置,也有一些不可達(dá)的位置(障礙、墻壁、邊界)。從一個(gè)位置到下一個(gè)位置只能通過向上(或者向右、或者向下、或者向左)走一步來實(shí)現(xiàn),從起點(diǎn)出發(fā),如何找到一條到達(dá)終點(diǎn)的通路。

3.思路分析

本文通過按照約定的策略(比如下->右->上->左)不停的遞歸調(diào)用方法尋找迷宮的出口。從起點(diǎn)出發(fā),每個(gè)位置都有四種選擇(上右下左),先選擇一個(gè)方向(按約定的順序選擇優(yōu)先方向),如果該方向能夠走下去,那么就往這個(gè)方向走,當(dāng)前位置切換為下一個(gè)位置。如果不能走,那么換個(gè)方向走,如果所有方向都走不了,那么就回到到上一個(gè)位置去。一直這樣執(zhí)行下去,如果當(dāng)前位置是終點(diǎn),就退出程序

  • 用二維數(shù)組來模擬迷宮地圖
  • 1代表墻壁
  • 0代表該位置可達(dá)。
  • 2代表每走過一個(gè)位置就將地圖的對應(yīng)位置標(biāo)記 以免重復(fù)
  • 3代表走過這個(gè)位置但是走不通

4.代碼實(shí)現(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)到達(dá)終點(diǎn)
            return true;
        }else {
            if (map[i][j] == 0){          //當(dāng)前位置還沒走過
                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é)果輸出

由于按照下->右->上->左的約定順序取判定下一步是否可走
在到達(dá)(4,5)位置時(shí)會(huì)向向右走黃色的那條路線 當(dāng)走到(1,2)
位置時(shí)四周都不為0即四邊都不可走那么它就會(huì)退回到上一個(gè)位置
回到(1,3)后發(fā)現(xiàn)四周依舊不可達(dá)依此規(guī)則直至回到(4,5)

最終行走的路線就為紅線所示:

按照不同的策略有不同的行走路線

到此這篇關(guān)于Java遞歸實(shí)現(xiàn)迷宮游戲的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)迷宮游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java定時(shí)任務(wù)實(shí)現(xiàn)的4種方式小結(jié)

    java定時(shí)任務(wù)實(shí)現(xiàn)的4種方式小結(jié)

    這篇文章主要介紹了java定時(shí)任務(wù)實(shí)現(xiàn)的4種方式小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring Boot修改啟動(dòng)端口的方法

    Spring Boot修改啟動(dòng)端口的方法

    下面小編就為大家?guī)硪黄猄pring Boot修改啟動(dòng)端口的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • 記一次線程爆滿導(dǎo)致服務(wù)器崩潰的問題排查及解決

    記一次線程爆滿導(dǎo)致服務(wù)器崩潰的問題排查及解決

    這篇文章主要介紹了記一次線程爆滿導(dǎo)致服務(wù)器崩潰的問題排查及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進(jìn)行路由

    springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進(jìn)行路由

    這篇文章主要介紹了springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進(jìn)行路由,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot錯(cuò)誤處理流程深入詳解

    SpringBoot錯(cuò)誤處理流程深入詳解

    在項(xiàng)目開發(fā)中出現(xiàn)異常時(shí)很平常不過的事情,我們處理異常也有很多種方式。本文將詳細(xì)為大家講解SpringBoot實(shí)現(xiàn)異常處理幾種方法,感興趣的可以學(xué)習(xí)一下
    2022-10-10
  • Java?精煉解讀類和對象原理

    Java?精煉解讀類和對象原理

    面向?qū)ο竽耸荍ava語言的核心,是程序設(shè)計(jì)的思想。Java語言的面向?qū)ο蠹夹g(shù)包括了面向?qū)ο蠛兔嫦蜻^程的基本概念,面向?qū)ο蟮奶卣鳎琂ava語言的類,對象,修飾符,抽象類等一系列的知識點(diǎn)
    2022-03-03
  • 使用Java實(shí)現(xiàn)將ppt轉(zhuǎn)換為文本

    使用Java實(shí)現(xiàn)將ppt轉(zhuǎn)換為文本

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)將ppt轉(zhuǎn)換為文本,文中的示例代碼簡潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-01-01
  • java 數(shù)據(jù)庫連接與增刪改查操作實(shí)例詳解

    java 數(shù)據(jù)庫連接與增刪改查操作實(shí)例詳解

    這篇文章主要介紹了java 數(shù)據(jù)庫連接與增刪改查操作,結(jié)合實(shí)例形式詳細(xì)分析了java使用jdbc進(jìn)行數(shù)據(jù)庫連接及增刪改查等相關(guān)操作實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Java設(shè)計(jì)模式之java組合模式詳解

    Java設(shè)計(jì)模式之java組合模式詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之組合模式,簡單說明了組合模式的原理,并結(jié)合實(shí)例分析了java組合模式的具體用法,需要的朋友可以參考下
    2021-09-09
  • SpringBoot中Zookeeper分布式鎖的原理和用法詳解

    SpringBoot中Zookeeper分布式鎖的原理和用法詳解

    Zookeeper是一個(gè)分布式協(xié)調(diào)服務(wù),它提供了高可用、高性能、可擴(kuò)展的分布式鎖機(jī)制,SpringBoot是一個(gè)基于Spring框架的開發(fā)框架,它提供了對Zookeeper分布式鎖的集成支持,本文將介紹SpringBoot中的 Zookeeper分布式鎖的原理和使用方法,需要的朋友可以參考下
    2023-07-07

最新評論