亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java圖的深度優先遍歷實現隨機生成迷宮

2024-07-13 10:17:06
字體:
來源:轉載
供稿:網友

最近經常在機房看同學在玩一個走迷宮的游戲,比較有趣,自己也用java寫一個實現隨機生成迷宮的算法,其實就是一個圖的深度優先遍歷算法.基本思想就是,迷宮中的每個點都有四面墻,然后呢。

1、從任意一點開始訪問(我的算法中固定是從(0,0)點開始),往四個方向中的隨機一個訪問(每訪問到一個可訪問的點,就去掉該點的那個方向的墻),被訪問點繼續以這種方識向下進行訪問。
2、對每個被訪問的點都被標識為已訪問,當一個點對某個方向進行訪問時我們首先會判斷被訪問點是否已被訪問,或者觸到邊界.如果該點四個方向皆已訪問或已無法訪問,就退回上一個點。上一個點繼續這個過程。 

這樣一次遍歷下來,可以確定每個點都被訪問過,而且由于每次訪問的方向都是隨機,這就會形成許多不同遍歷情況,同時每兩個點之間的路徑是唯一,也就形成不同的迷宮,且是起點到終點只有唯一路徑,這是由于圖的深度遍歷算法的特點所決定的。算法的實現上,主要是利用棧,第一次,先把第一個點壓進棧里,每訪問到一個點,就把該點壓進棧里,我們再對棧頂的點進行四個方向的隨機訪問,訪問到新點,又把新點壓進去,一旦這個點四個方向都無法訪問了,就讓該點退棧,再對棧頂的點的四個方向進行訪問,以此類推,直到棧里的點都全部退出了,我們的遍歷就成功了,這是一個遞歸的過程,這個算法自然可以用遞歸的方法來實現,不過這里我這樣做,而是手工用一個數組作為棧來實現,呵呵~~說了這么多,也不知道自己要表達的有沒表達出來。不過我感覺我的具體代碼設計還是寫的不好,還有很多地方缺乏完善和優化,權當是算法練習,以下是兩個關鍵類的核心代碼,至于表示層的代碼就不貼出來了,因為那些都很瑣碎。

下面是效果圖:

java,迷宮

迷宮的類:

//作者:zhongZw  //郵箱:zhong317@126.com  package cn.zhongZw.model; import java.util.ArrayList; import java.util.Random; public class MazeModel {   private int width = 0;   private int height = 0;   private Random rnd = new Random();    public MazeModel() {     this.width = 50; //迷宮寬度      this.height = 50; //迷宮高度    }   public int getWidth() {     return width;   }   public void setWidth(int width) {     this.width = width;   }   public int getHeight() {     return height;   }   public void setHeight(int height) {     this.height = height;   }   public MazeModel(int width, int height) {     super();     this.width = width;     this.height = height;   }   public ArrayList < MazePoint > getMaze() {     ArrayList < MazePoint > maze = new ArrayList < MazePoint > ();     for (int h = 0; h < height; h++) {       for (int w = 0; w < width; w++) {         MazePoint point = new MazePoint(w, h);         maze.add(point);       }     }     return CreateMaze(maze);   }   private ArrayList < MazePoint > CreateMaze(ArrayList < MazePoint > maze) {     int top = 0;     int x = 0;     int y = 0;     ArrayList < MazePoint > team = new ArrayList < MazePoint > ();     team.add(maze.get(x + y * width));     while (top >= 0) {       int[] val = new int[] {         -1, -1, -1, -1       };       int times = 0;       boolean flag = false;       MazePoint pt = (MazePoint) team.get(top);       x = pt.getX();       y = pt.getY();       pt.visted = true;        ro1: while (times < 4) {         int dir = rnd.nextInt(4);         if (val[dir] == dir)           continue;         else           val[dir] = dir;             switch (dir) {         case 0: // 左邊            if ((x - 1) >= 0 && maze.get(x - 1 + y * width).visted == false) {             maze.get(x + y * width).setLeft();             maze.get(x - 1 + y * width).setRight();             team.add(maze.get(x - 1 + y * width));             top++;             flag = true;             break ro1;            }           break;         case 1: // 右邊            if ((x + 1) < width && maze.get(x + 1 + y * width).visted == false) {              maze.get(x + y * width).setRight();             maze.get(x + 1 + y * width).setLeft();             team.add(maze.get(x + 1 + y * width));             top++;             flag = true;             break ro1;           }           break;         case 2: // 上邊            if ((y - 1) >= 0 && maze.get(x + (y - 1) * width).visted == false) {             maze.get(x + y * width).setUp();             maze.get(x + (y - 1) * width).setDown();             team.add(maze.get(x + (y - 1) * width));             top++;             flag = true;             break ro1;           }           break;         case 3: // 下邊            if ((y + 1) < height && maze.get(x + (y + 1) * width).visted == false) {             maze.get(x + y * width).setDown();             maze.get(x + (y + 1) * width).setUp();             team.add(maze.get(x + (y + 1) * width));             top++;             flag = true;             break ro1;           }           break;         }         times += 1;       }       if (!flag) {         team.remove(top);         top -= 1;       }      }      return maze;   } } 

 迷宮

//作者:zhongZw  //郵箱:zhong317@126.com  package cn.zhongZw.model; import java.util.*; import java.lang.*; public class MazePoint {   private int left = 0;   private int right = 0;   private int up = 0;   private int down = 0;   private int x;   private int y;   public boolean visted;   public MazePoint(int x, int y) {     this.x = x;     this.y = y;   }   public int getLeft() {     return left;   }    public void setLeft() {     this.left = 1;   }   public int getRight() {     return right;   }   public void setRight() {     this.right = 1;   }   public int getUp() {     return up;   }    public void setUp() {     this.up = 1;   }   public int getDown() {     return down;   }    public void setDown() {     this.down = 1;   }   public int getX() {     return x;   }   public void setX(int x) {     this.x = x;   }   public int getY() {     return y;   }   public void setY(int y) {     this.y = y;   }   } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av电影手机在线| 午夜精品久久久久久久99热| 国语自产精品视频在线看| 欧美乱妇高清无乱码| 91美女片黄在线观看游戏| 欧美孕妇与黑人孕交| 欧美一区二三区| 亚洲电影免费观看高清完整版在线| 国产精品稀缺呦系列在线| 亚洲综合成人婷婷小说| 精品美女永久免费视频| 亚洲精品在线不卡| 国产精品免费看久久久香蕉| 北条麻妃99精品青青久久| 亚洲一二三在线| 欧美丝袜第一区| 欧美老女人xx| 国产精品丝袜一区二区三区| 2019最新中文字幕| 国产丝袜精品视频| 欧美成人精品一区二区三区| 国产不卡av在线免费观看| 在线精品高清中文字幕| 97欧美精品一区二区三区| 在线观看中文字幕亚洲| 国产丝袜一区二区| 久精品免费视频| 国产激情视频一区| 亚洲欧美另类在线观看| 96pao国产成视频永久免费| 日韩av男人的天堂| 91丝袜美腿美女视频网站| 日韩电影在线观看免费| 精品亚洲一区二区三区在线观看| 国产一区欧美二区三区| 亚洲视屏在线播放| 久久艳片www.17c.com| 精品国产一区二区三区久久久狼| 国产成人一区二区三区小说| 久久成人av网站| y97精品国产97久久久久久| 亚洲欧美中文日韩v在线观看| 日本欧美黄网站| 欧美激情二区三区| 日本午夜精品理论片a级appf发布| 91精品国产91久久久| 中日韩美女免费视频网站在线观看| 欧美丰满少妇xxxxx做受| 国产亚洲精品美女久久久久| 国产精品入口日韩视频大尺度| 国产精品1区2区在线观看| 26uuu另类亚洲欧美日本老年| 国产精品视频一| 亚洲新中文字幕| 欧美日韩国产成人高清视频| 亚洲а∨天堂久久精品喷水| 91精品国产综合久久香蕉最新版| 欧美日韩第一视频| 久久影视电视剧免费网站清宫辞电视| 欧美刺激性大交免费视频| 欧美丰满少妇xxxx| 国产精品自产拍在线观看| 欧美亚洲另类激情另类| 91av视频在线播放| 欧美激情视频网| 日本高清不卡的在线| 久久精品国产成人| 久久国产精品久久久久久久久久| 久久久久久中文字幕| 91成人天堂久久成人| 亚洲香蕉伊综合在人在线视看| 国产成人精品免费视频| 欧美成人国产va精品日本一级| 国产精品久久久久久中文字| 久久久精品一区二区三区| 欧美一区二区三区艳史| 日韩精品中文在线观看| 日韩欧美aⅴ综合网站发布| 久久久999精品| 国产精品免费福利| 亚洲人成网站777色婷婷| 爽爽爽爽爽爽爽成人免费观看| 亚洲男人av在线| 欧美性jizz18性欧美| 欧美在线视频在线播放完整版免费观看| 日韩av在线免费看| 久久久综合免费视频| 国产精品91免费在线| 国产精品久久久久久久久久东京| 久久精品国产亚洲7777| 欧美成人高清视频| 精品性高朝久久久久久久| 亚洲字幕在线观看| 91亚洲精品久久久| 狠狠躁18三区二区一区| 97香蕉久久超级碰碰高清版| 亚洲成av人影院在线观看| 亚洲精品国产美女| 国语自产精品视频在线看| 国产精品视频区| 性欧美亚洲xxxx乳在线观看| 亚洲精品自拍第一页| 亚洲国产精品系列| 亚洲色图欧美制服丝袜另类第一页| 亚洲精品资源美女情侣酒店| 色噜噜狠狠狠综合曰曰曰88av| 一区二区av在线| 91精品中国老女人| 91久久久久久| 亚洲人午夜色婷婷| 国产日韩欧美黄色| 亚洲伊人成综合成人网| 欧美成人黑人xx视频免费观看| 国产欧美一区二区三区在线看| 亚洲精品456在线播放狼人| 亚洲精品午夜精品| 韩国欧美亚洲国产| 亚洲激情久久久| 日韩欧美国产免费播放| 日韩欧美国产视频| yw.139尤物在线精品视频| 欧美日韩国产综合视频在线观看中文| 91精品视频专区| 欧美日韩福利电影| 91久久国产精品| 国产精品久久久久久亚洲影视| 北条麻妃一区二区在线观看| 国产欧美最新羞羞视频在线观看| 欧美激情一区二区三区成人| 国产精品久久一区| 8090成年在线看片午夜| 日韩一区二区在线视频| 黑人与娇小精品av专区| 91精品国产91久久久久久最新| 91精品久久久久久久久久| 欧美黑人xxx| 国产成人aa精品一区在线播放| 亚洲人成网站777色婷婷| 国产成人免费91av在线| 欧美在线视频网| 日韩av片电影专区| 性亚洲最疯狂xxxx高清| 国产午夜精品免费一区二区三区| 日本精品中文字幕| 中文字幕亚洲无线码在线一区| 色妞在线综合亚洲欧美| 日韩成人网免费视频| 欧美精品videosex性欧美| 精品电影在线观看| 国产精品久久国产精品99gif| 国产一区私人高清影院| 亚洲一区二区三区xxx视频| 亚洲国产欧美一区| 久久久久免费视频| 欧美日韩日本国产| 欧美色videos| 日韩视频在线观看免费| 亚洲精品国精品久久99热一| 国产一区二区视频在线观看| 91九色国产视频| 91国产中文字幕| 成人在线视频网| 亚洲成人网在线| 亚洲国产成人精品电影|