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

首頁 > 學(xué)院 > 邏輯算法 > 正文

PHP樹生成迷宮及A-自動尋路算法

2020-03-22 19:22:29
字體:
供稿:網(wǎng)友
  • PHP樹生成迷宮及A*自動尋路算法

    迷宮算法是采用樹的深度遍歷原理,這樣生成的迷宮相當(dāng)?shù)募?xì),而且死胡同數(shù)量相對較少!
    任意兩點(diǎn)之間都存在唯一的一條通路。
    至于A*尋路算法是最大眾化的一全自動尋路算法
    完整代碼已上傳,http://download.csdn.net/detail/hello_katty/8885779 ,此處做些簡單解釋,還需要大家自己思考動手。廢話不多說,貼上帶代碼 迷宮生成類:
    /** 生成迷宮類 * @date 2015-07-10 * @edit http://www.lai18.com * @version 1 **/html' target='_blank'>class Maze{    // Maze Create    private $_w;    private $_h;    private $_grids;    private $_walkHistory;    private $_walkHistory2;    private $_targetSteps;    // Construct    public function Maze() {        $this->_w = 6;        $this->_h = 6;        $this->_grids = array();    }    // 設(shè)置迷宮大小    public function set($width = 6, $height = 6) {        if ( $width > 0 ) $this->_w = $width;        if ( $height > 0 ) $this->_h = $height;        return $this;    }    // 取到迷宮    public function get() {        return $this->_grids;    }    // 生成迷宮    public function create() {        $this->_init();        return $this->_walk(rand(0, count($this->_grids) -1 ));    }    // 獲取死胡同點(diǎn)    public function block($n = 0, $rand = false) {        $l = count($this->_grids);        for( $i = 1; $i < $l; $i++ ) {            $v = $this->_grids[$i];            if ( $v == 1 || $v == 2 || $v == 4 || $v == 8 ) {                $return[] = $i;            }        }        // 隨機(jī)取點(diǎn)        if ( $rand ) shuffle($return);         if ( $n == 0 ) return $return;         if ( $n == 1 ) {            return array_pop($return);        } else {            return array_slice($return, 0, $n);        }    }    /**    生成迷宮的系列函數(shù)    */    private function _walk($startPos) {        $this->_walkHistory = array();        $this->_walkHistory2 = array();        $curPos = $startPos;        while ($this->_getNext0() != -1) {            $curPos = $this->_step($curPos);            if ( $curPos === false ) break;        }        return $this;    }    private function _getTargetSteps($curPos) {        $p = 0;        $a = array();        $p = $curPos - $this->_w;        if ($p > 0 && $this->_grids[$p] === 0 && ! $this->_isRepeating($p)) {            array_push($a, $p);        } else {            array_push($a, -1);        }        $p = $curPos + 1;        if ($p % $this->_w != 0 && $this->_grids[$p] === 0 && ! $this->_isRepeating($p)) {            array_push($a, $p);        } else {            array_push($a, -1);        }        $p = $curPos + $this->_w;        if ($p < count($this->_grids) && $this->_grids[$p] === 0 && ! $this->_isRepeating($p)) {            array_push($a, $p);        } else {            array_push($a, -1);        }        $p = $curPos - 1;        if (($curPos % $this->_w) != 0 && $this->_grids[$p] === 0 && ! $this->_isRepeating($p)) {            array_push($a, $p);        } else {            array_push($a, -1);        }        return $a;    }    private function _noStep() {        $l = count($this->_targetSteps);        for ($i = 0; $i < $l; $i ++) {            if ($this->_targetSteps[$i] != -1) return false;        }        return true;    }    private function _step($curPos) {        $this->_targetSteps = $this->_getTargetSteps($curPos);        if ( $this->_noStep() ) {            if ( count($this->_walkHistory) > 0 ) {                $tmp = array_pop($this->_walkHistory);            } else {                return false;            }            array_push($this->_walkHistory2, $tmp);            return $this->_step($tmp);        }        $r = rand(0, 3);        while ( $this->_targetSteps[$r] == -1) {            $r = rand(0, 3);        }        $nextPos = $this->_targetSteps[$r];        $isCross = false;        if ( $this->_grids[$nextPos] != 0)            $isCross = true;        if ($r == 0) {            $this->_grids[$curPos] ^= 1;            $this->_grids[$nextPos] ^= 4;        } elseif ($r == 1) {            $this->_grids[$curPos] ^= 2;            $this->_grids[$nextPos] ^= 8;        } elseif ($r == 2) {            $this->_grids[$curPos] ^= 4;            $this->_grids[$nextPos] ^= 1;        } elseif ($r == 3) {            $this->_grids[$curPos] ^= 8;            $this->_grids[$nextPos] ^= 2;        }        array_push($this->_walkHistory, $curPos);        return $isCross ? false : $nextPos;    }    private function _isRepeating($p) {        $l = count($this->_walkHistory);        for ($i = 0; $i < $l; $i ++) {            if ($this->_walkHistory[$i] == $p) return true;        }        $l = count($this->_walkHistory2);        for ($i = 0; $i < $l; $i ++) {            if ($this->_walkHistory2[$i] == $p) return true;        }        return false;    }    private function _getNext0() {        $l = count($this->_grids);         for ($i = 0; $i <= $l; $i++ ) {            if ( $this->_grids[$i] == 0) return $i;        }        return -1;    }    private function _init() {        $this->_grids = array();        for ($y = 0; $y < $this->_h; $y ++) {            for ($x = 0; $x < $this->_w; $x ++) {                array_push($this->_grids, 0);            }        }        return $this;    }}

    A*尋路算法

    /** 尋路算法 * @date 2015-07-10 * @edit http://www.lai18.com * @version 1 **/class AStar{    // A-star    private $_open;    private $_closed;    private $_start;    private $_end;    private $_grids;    private $_w;    private $_h;    // Construct    public function AStar(){        $this->_w = null;        $this->_h = null;        $this->_grids = null;    }    public function set($width, $height, $grids) {        $this->_w = $width;        $this->_h = $height;        $this->_grids = $grids;        return $this;    }    // 迷宮中尋路    public function search($start = false, $end = false) {        return $this->_search($start, $end);    }    /**    自動尋路 - A-star 算法       */    public function _search($start = false, $end = false) {        if ( $start !== false ) $this->_start = $start;        if ( $end !== false ) $this->_end = $end;        $_sh = $this->_getH($start);        $point['i'] = $start;        $point['f'] = $_sh;        $point['g'] = 0;        $point['h'] = $_sh;        $point['p'] = null;        $this->_open[] = $point;        $this->_closed[$start] = $point;        while ( 0 < count($this->_open) ) {            $minf = false;            foreach( $this->_open as $key => $maxNode ) {                if ( $minf === false || $minf > $maxNode['f'] ) {                    $minIndex = $key;                }            }            $nowNode = $this->_open[$minIndex];            unset($this->_open[$minIndex]);            if ( $nowNode['i'] == $this->_end ) {                $tp = array();                while( $nowNode['p'] !== null ) {                    array_unshift($tp, $nowNode['p']);                    $nowNode = $this->_closed[$nowNode['p']];                }                array_push($tp, $this->_end);                break;            }            $this->_setPoint($nowNode['i']);        }        $this->_closed = array();        $this->_open = array();        return $tp;    }    private function _setPoint($me) {        $point = $this->_grids[$me];        // 所有可選方向入隊列        if ( $point & 1 ) {            $next = $me - $this->_w;            $this->_checkPoint($me, $next);        }        if ( $point & 2 ) {            $next = $me + 1;            $this->_checkPoint($me, $next);        }        if ( $point & 4 ) {            $next = $me + $this->_w;            $this->_checkPoint($me, $next);        }        if ( $point & 8 ) {            $next = $me - 1;            $this->_checkPoint($me, $next);        }    }    private function _checkPoint($pNode, $next) {        if ( $this->_closed[$next] ) {            $_g = $this->_closed[$pNode]['g'] + $this->_getG($next);            if ( $_g < $check['g'] ) {                $this->_closed[$next]['g'] = $_g;                $this->_closed[$next]['f'] = $this->_closed[$next]['g'] + $this->_closed[$next]['h'];                $this->_closed[$next]['p'] = $pNode;            }        } else {            $point['p'] = $pNode;            $point['h'] = $this->_getH($next);            $point['g'] = $this->_getG($next);            $point['f'] = $point['h'] + $point['g'];            $point['i'] = $next;            $this->_open[] = $point;            $this->_closed[$next] = $point;        }    }    private function _getG($point) {        return abs($this->_start - $point);    }    private function _getH($point) {        return abs($this->_end - $point);    }}

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    日韩久久久久久久| 日韩在线观看一区二区三区| 日韩中文字幕免费在线| 国产一级不卡毛片| 亚洲国产91色在线| 风间由美一区| 人人干人人草| 美女被久久久| 色香色香欲天天天影视综合网| 影音先锋一区二区资源站| 91香蕉视频在线观看视频| 波多野结衣激情视频| 精品国产乱码一区二区三区| 欧美高清视频一二三区| 99国产成+人+综合+亚洲欧美| 日韩成人在线观看| 国产爆初菊在线观看免费视频网站| 久久久综合九色合综国产精品| 欧美色图激情小说| 18性欧美xxxⅹ性满足| 日韩免费毛片| 成人亚洲免费视频| www.中文字幕久久久| 亚洲国产精品视频| 精品一区二区6| 欧美精品高清| 中文天堂在线资源| 国产精品亚洲第五区在线| 免费观看在线综合色| 欧美中文字幕精在线不卡| 日韩中文av在线| 久久精品国产大片免费观看| 国产成人a亚洲精v品无码| 啦啦啦免费高清视频在线观看| 激情文学综合插| 免费在线观看成人| 超碰在线观看av| 精品影院一区| 天天做天天摸天天爽国产一区| 日本成a人片在线观看| 欧美另类videosbestsex日本| 四虎成人在线观看| 亚洲3区在线| 欧美极品欧美精品欧美视频| 日韩精品中文字| 99久久99久久精品国产| 色哟哟亚洲精品一区二区| 亚洲国产小视频| 91精品在线观看视频| 亚洲成色777777在线观看影院| 91精品国产自产在线观看永久∴| 亚洲手机成人高清视频| 欧美黄色成人| 日本高清一区二区视频| 国产激情欧美| 污片视频在线免费观看| 搡的我好爽在线观看免费视频| 中国特级黄色大片| 中文日本高清免费| 日韩脚交footjobhdboots| 精品国产凹凸成av人网站| 天天爽夜夜爽一区二区三区| 精品视频麻豆入口| 国产一区二区三区三区在线观看| 偷拍一区二区三区| 精品人妻一区二区三区视频| 中文字幕亚洲综合久久筱田步美| 老鸭窝毛片一区二区三区| 精品视频在线一区二区在线| 欧美精品一区二区三区免费| 日产精品一线二线三线芒果| 日韩成人免费在线视频| 17婷婷久久www| 精品影片在线观看的网站| 国产又粗又猛又爽又黄的视频一| 在线精品视频在线观看高清| 国产69久久| 日韩精品免费一区二区三区| a屁视频一区二区三区四区| 欧美一区二区三区精品电影| 欧美顶级xxxxbbbb| 国产热re99久久6国产精品| 欧美大胆a视频| 亚洲福利视频一区| 国模精品视频| 国产综合色在线| 国产一线天粉嫩馒头极品av| 亚洲一区视频在线播放| 国产欧美日韩不卡| 怡红院av一区二区三区| 欧美午夜精品久久久久久浪潮| 成人黄色大片网站| 亚洲精品videosex极品| 日韩久久免费视频| 欧美日韩午夜电影网| 久久国产精品久久久久久电车| 亚洲 日本 欧美 中文幕| 久久一本综合| 麻豆精品国产自产在线| 欧美特黄aaa| 国产99在线|亚洲| 久久最新网址| 精品在线一区二区三区| 成人久久综合| 亚洲一区二区中文字幕| 成人妇女淫片aaaa视频| 日韩国产成人精品| 手机在线不卡av| 色噜噜夜夜夜综合网| 娇妻被老王脔到高潮失禁视频| 天天色天天操天天射| 美女被到爽高潮视频| 91精品国产色综合久久ai换脸| 国产成人在线视频免费播放| 国产乱子夫妻xx黑人xyx真爽| 最新国产热播激情视频| 欧美电影在线观看免费| 国产精品www| 在线看无码的免费网站| 在线视频日本亚洲性| www.xxxx日本| 亚洲精品乱码| 热国产热中文视频二区| 精品久久久久久中文字幕大豆网| 国产一区二区精品调教| 视频在线观看一区二区| 自拍偷拍精品| 中文字幕高清一区| 欧美大片免费高清观看| 欧美做受高潮电影o| 亚洲黄色小视频在线观看| 国产aⅴ激情无码久久久无码| 亚洲少妇中出一区| 国产精品一二三区在线观看| 欧美gay男男猛男无套| 短视频在线观看| 亚洲精品久久久久中文字幕二区| 桃乃木かなav在线播放| 亚洲欧美偷拍卡通变态| 色噜噜噜噜噜噜| 亚洲一区 二区 三区| 捆绑调教日本一区二区三区| 另类小说一区二区三区| 亚洲久草在线| 黄色美女网站在线观看| 91看片就是不一样| 国产成人免费视频网站视频社区| 免费无码毛片一区二三区| 欧美日韩一二| 欧美a级片免费看| 欧美亚洲愉拍一区二区| 日本福利视频| 日本一区二区欧美| 日韩成人影院| 久久激情五月婷婷| 亚洲无人区码一码二码三码的含义| 丁香六月天婷婷| 成人午夜淫片100集| 免费黄色av网址| 高清亚洲成在人网站天堂| 黄网站色欧美视频| 国产午夜精品一区在线观看| 国产一级av毛片| wwwjizzjizzcom| 国产精品诱惑| 国产精品xxxxxx| 中文字幕视频免费观看| 少妇高潮久久久久久潘金莲| 国产又黄又猛又粗| 日本免费在线观看视频| 久久久精品久久| 国内成人在线| 国产美女被遭强高潮免费网站| 亚洲精品综合一区二区三区| 在线激情影院一区| 精品无人区卡一卡二卡三乱码免费卡| 婷婷一区二区三区| 精品久久久久99| 性视频在线播放| 欧美亚洲另类在线| 免费日本一区二区三区视频| 欧美一区观看| 99热这里只有精品免费| 欧美特黄级在线| 亚洲高清视频网站| 国产尤物在线播放| 黄色三级视频在线播放| 北岛玲日韩精品一区二区三区| 久99久在线视频| 欧美日韩电影在线观看| 成人黄色国产精品网站大全在线免费观看| 成人福利免费在线观看| 麻豆91在线看| 国产精品综合色区在线观看| 橘梨纱av一区二区三区在线观看| 在线视频色在线| 中文字幕日本在线观看| 白白色在线发布| 大肉大捧一进一出好爽| 久久久久国产免费免费| 成人h在线播放| 国产精品高清乱码在线观看| 色哟哟亚洲精品一区二区| 国产精品国产三级国产试看| 亚洲老板91色精品久久| va视频在线观看| 成人黄色av片| 999国产精品一区| www.色婷婷.com| 久久久www免费人成黑人精品| 少妇愉情理伦三级| 欧美性猛交久久久乱大交小说| 日韩欧美在线视频日韩欧美在线视频| 欧美黑粗硬大| 羞羞网站在线免费观看| 97电影在线观看| 巨乳女教师的诱惑| 99精品欧美一区二区三区小说| 国产精品入口麻豆高清| 欧美一区二区三区人| 国产免费黄色片| 亚洲一二三四区不卡| 一级黄色大片免费观看| 色狠狠av一区二区三区香蕉蜜桃| 欧美综合欧美视频| 久草手机视频在线观看| 精品无码m3u8在线观看| 黑巨茎大战欧洲金发美女| 亚欧精品视频一区二区三区| 尤物在线免费视频| 精品国产人妻一区二区三区| 国产精品久久久久久久岛一牛影视| 在线看无码的免费网站| 最近2019中文字幕第三页视频| 欧美日韩一区二区三区四区不卡| 欧美激情国产精品日韩| 日韩精品免费一区二区| 粉嫩av一区二区夜夜嗨| 成人小视频在线| 国产精品刘玥久久一区| 国产又粗又大又长| 日韩欧美在线精品| 九一亚洲精品| 欧美成人精品激情在线观看| www.欧美黄色| 亚洲欧美日韩色图| 成年人在线免费观看视频网站| 伊人久久久久久久久久久久久久| 欧美富婆性猛交| 在线观看黄网址| 成人性教育视频在线观看| 国产夫妻在线播放| canopen超线视频网线的应用| 星空无限传媒在线| 国产在线麻豆精品观看| 国产一二三区在线播放| 欧美高清视频在线观看mv| 青青草视频播放| 97人妻一区二区精品视频| 色欲av永久无码精品无码蜜桃| 免费高清视频日韩| 日韩三级视频中文字幕| 在线观看视频免费一区二区三区| 国产欧美亚洲一区| 日本最新不卡在线| 日本三级午夜理伦三级三| 亚洲综合专区| 老牛影视一区二区三区| 黄色的电影在线-骚虎影院-骚虎视频| 一区在线免费观看| 成人福利在线观看视频| 国精产品999国精产品官网| 丝袜亚洲另类欧美| 免费在线观看日韩视频| 五月天一区二区三区| 欧美日韩日本网| 精品国产一区二区三区忘忧草| 成人午夜av电影| 中文字幕少妇| 国产精品bbw一区二区三区| 超碰在线免费播放| 欧美日韩国产精品综合| 国产精品一区=区| 亚洲精品在线免费观看视频| 国产成人久久久精品一区| 欧美日韩免费观看一区二区三区| 美女久久久久久久久| av一级黄色片| 亚洲毛片播放| 亚洲老板91色精品久久| 国产精品视频免费观看www| 一区二区在线免费看| 亚洲一区二区三区四区在线| www视频在线观看com| 国产一级片网址| 国产视频一区二区三区在线播放| 韩剧1988在线观看免费完整版| 亚洲午夜精品一区二区| 性伦欧美刺激片在线观看| 久久国产精品网| 自拍偷拍精品| yy6080午夜| 96精品视频| 亚洲欧洲av色图| 午夜激情视频在线观看| 五月婷婷一区| 精品久久人人做人人爱| 亚洲精品天堂网| 视频91a欧美| 天天做天天爱综合| 国产成人免费在线观看| 天天干,天天干| 波多野吉衣在线视频| 久久电影视频| 亚洲成人免费av| 国产视频在线观看视频| 成人动漫在线播放| 日本一区免费在线观看| 国产美女av一区二区三区| 欧美精品videosex| 在线 亚洲欧美在线综合一区| 国产精品白丝一区二区三区| 91wwwcom在线观看| 天堂а√在线最新版中文在线| 在线视频亚洲专区| 91麻豆免费在线视频| 免费福利视频一区二区三区| 91麻豆精品国产自产在线|