最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年01月24日 17:34:11   作者:HairLossException  
這篇文章主要介紹了如何利用Java遞歸方法實現(xiàn)迷宮游戲,下面文章會詳細的從為問題描述開始,清晰的解題思路以及詳細的代碼實現(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操作mysql數(shù)據(jù)庫過程解析

    原生Java操作mysql數(shù)據(jù)庫過程解析

    這篇文章主要介紹了原生Java操作mysql數(shù)據(jù)庫過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 解決使用this.getClass().getResource()獲取文件時遇到的坑

    解決使用this.getClass().getResource()獲取文件時遇到的坑

    這篇文章主要介紹了解決使用this.getClass().getResource()獲取文件時遇到的坑問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring @Bean注解的使用場景與案例實現(xiàn)

    Spring @Bean注解的使用場景與案例實現(xiàn)

    隨著SpringBoot的流行,我們現(xiàn)在更多采用基于注解式的配置從而替換掉了基于XML的配置,所以本篇文章我們主要探討基于注解的@Bean以及和其他注解的使用
    2023-03-03
  • 關(guān)于連接遠程redis的流程

    關(guān)于連接遠程redis的流程

    這篇文章主要介紹了關(guān)于連接遠程redis的流程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • SpringBoot中的Profile多環(huán)境配置方法

    SpringBoot中的Profile多環(huán)境配置方法

    這篇文章主要介紹了SpringBoot中的Profile多環(huán)境配置,SpringBoot提供了兩種多環(huán)境配置的方式,分別是使用profile文件進行多環(huán)境配置以及使用@Profile注解進行多環(huán)境配置,需要的朋友可以參考下
    2023-01-01
  • Java中final作用于變量、參數(shù)、方法及類該如何處理

    Java中final作用于變量、參數(shù)、方法及類該如何處理

    Java中的final關(guān)鍵字非常重要,它可以應(yīng)用于類、方法以及變量,下面這篇文章主要給大家介紹了關(guān)于Java中final作用于變量、參數(shù)、方法及類該如何處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • java byte與base64的互轉(zhuǎn)的實現(xiàn)示例

    java byte與base64的互轉(zhuǎn)的實現(xiàn)示例

    在項目開發(fā)中經(jīng)常用到,比如前端上送文件流(byte[])到后臺并轉(zhuǎn)成文件,本文主要介紹了java byte與base64的互轉(zhuǎn)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Spring Boot2.X國際化文件編寫配置

    Spring Boot2.X國際化文件編寫配置

    這篇文章主要介紹了Spring Boot2.X國際化文件編寫配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • spring 中事務(wù)注解@Transactional與trycatch的使用

    spring 中事務(wù)注解@Transactional與trycatch的使用

    這篇文章主要介紹了spring 中事務(wù)注解@Transactional與trycatch的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java中JDBC增刪改查操作詳解

    java中JDBC增刪改查操作詳解

    大家好,本篇文章主要講的是java中JDBC增刪改查操作詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論

石屏县| 阿拉善右旗| 海伦市| 陆良县| 台州市| 岑巩县| 同心县| 图木舒克市| 黑山县| 涞源县| 教育| 疏附县| 航空| 吉木乃县| 阳曲县| 阿拉善左旗| 巩义市| 和静县| 德江县| 田阳县| 察雅县| 高唐县| 建昌县| 南郑县| 信宜市| 辽阳县| 察隅县| 宿迁市| 林芝县| 绍兴县| 盐源县| 卓资县| 东兴市| 新蔡县| 孟州市| 界首市| 东丰县| 资源县| 静海县| 博爱县| 米泉市|