亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? astar.cpp

?? 我自己編寫的A*搜索算法
?? CPP
字號(hào):
#include <cmath>
#include <stack>
#include "AStar.hpp"

using namespace std;

/*
Author : WB
*/

//初始化地圖
AStar::AStar(char *m, const int &rows, const int &cols)
    : map_(m),rows_(rows), cols_(cols){
        init();
}

//釋放所有分配的資源
AStar::~AStar(){
	for(ClosedTable::iterator itr=ct_.begin(); itr!=ct_.end(); ++itr){
		delete (*itr);
	}
	while(!ot_.empty()){
		delete ot_.top();
		ot_.pop();
	}
}

//一個(gè)簡(jiǎn)易的ID生成算法
int AStar::generateId(const int &x, const int &y) const{
    return x * 18 + y;
}

//確定地圖中的初始點(diǎn)和終點(diǎn)坐標(biāo)
void AStar::findSourceAndDestination(){
    for(int i=0; i<rows_; ++i){
        for(int j=0; j<cols_; ++j){
            if(map_[i * cols_ + j] == 's'){
                source_.x = i;
                source_.y = j;
            }
            if(map_[i * cols_ + j] == 'd'){
                destination_.x = i;
                destination_.y = j;
            }
        }
    }
}

//判斷地圖上某點(diǎn)是否可以到達(dá)
bool AStar::canAccess(const int &x, const int &y) const{
    return map_[x * cols_ + y] != 'o';
}

void AStar::initStartPoint(){
    PNode start = new ANode;
    start->x = source_.x;
    start->y = source_.y;
    start->childNum = 0;
    start->id = generateId(start->x, start->y);
    start->parent = 0;
    start->g = 0;
    start->h = abs(start->x - destination_.x) + abs(start->y - destination_.y);
    start->f = start->g + start->h;
    ot_.push(start);
}

void AStar::init(){
    findSourceAndDestination();
    initStartPoint();
}

//判斷某個(gè)Node是否在ClosedTable中
AStar::PNode AStar::isInClosedTable(const int &id){
    for(ClosedTable::iterator itr=ct_.begin(); itr!= ct_.end(); ++itr){
        if((*itr)->id == id)
            return *itr;
    }
    return 0;
}

//判斷某個(gè)Node是否在OpenTable中
AStar::PNode AStar::isInOpenTable(const int &id){
    return ot_.contain(id);
}

//采用類似深度優(yōu)先搜索的算法更新Node的所有子節(jié)點(diǎn)及其后繼節(jié)點(diǎn)
void AStar::updateNodes(PNode p){
    stack<PNode> pStack;
    PNode temp = 0;
    for(int i=0; i<p->childNum; ++i){
        temp = p->children[i];
        if((p->g + 1) < temp->g){
			reCombine(temp, p);
            pStack.push(temp);
        }
    }
    while(!pStack.empty()){
        temp = pStack.top();
        pStack.pop();
        PNode tempChild = 0;
        for(int i=0; i<temp->childNum; ++i){
            tempChild = temp->children[i];
            if((temp->g + 1) < tempChild->g){
				reCombine(tempChild, temp);
                pStack.push(tempChild);
            }
        }
    }
}

//重新關(guān)聯(lián)父子Node的關(guān)系
void AStar::reCombine(PNode child, PNode parent){
	child->g = parent->g + 1;
	child->f =child->g + child->h;
	child->parent = parent;
}

//算法的核心,尋找最短路徑
//如果找到最短路徑,就將路徑存儲(chǔ)在path中,并且返回true
//否則返回false表示沒有路徑可達(dá)
bool AStar::findPath(vector<Point> &path){
    PNode node = ot_.top();
	//A*搜索算法
    while(!ot_.empty() && !(node->x == destination_.x && node->y == destination_.y)){
		ot_.pop();
		//向8個(gè)方向搜索節(jié)點(diǎn)
        for(int m=-1; m<2; ++m)
            for(int n=-1; n<2; ++n){
                if(m|n){
                    int tempx = node->x + m;
                    int tempy = node->y + n;
                    int tempid = generateId(tempx, tempy);
                    if(canAccess(tempx, tempy)){
                        PNode temp;
                        if((temp = isInOpenTable(tempid)) != 0){
                            node->children[node->childNum++] = temp;
                            if((node->g + 1) < temp->g){
								reCombine(temp, node);
                            }
                        }else if((temp = isInClosedTable(tempid)) != 0){
                            node->children[node->childNum++] = temp;
                            if((node->g + 1) < temp->g){
								reCombine(temp, node);
                                updateNodes(temp);
                            }
                        }else{
                            temp = new ANode;
                            temp->x = tempx;
                            temp->y = tempy;
                            temp->childNum = 0;
                            temp->id = tempid;
                            temp->parent = node;
                            temp->g = node->g + 1;
                            temp->h = abs(temp->x - destination_.x) + abs(temp->y - destination_.y);
                            temp->f = temp->g + temp->h;
							node->children[node->childNum++] = temp;
                            ot_.push(temp);
                        }
                    }
                }
            }
//        ot_.pop();
        ct_.push_back(node);
		node = ot_.top();
    }
    if(ot_.empty())
        return false;
	//將找到的路徑存儲(chǔ)在path中
    PNode bestNode = node->parent;
    while(bestNode->parent != 0){
        Point t;
        t.x = bestNode->x;
        t.y = bestNode->y;
        path.insert(path.begin(),t);
        bestNode = bestNode->parent;
    }
    return true;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲一区二区三区明星换脸| 日韩成人一区二区| 国产aⅴ精品一区二区三区色成熟| 欧美精品一区二区不卡 | 欧美一区二区三区免费大片| 亚洲高清一区二区三区| 欧美精品xxxxbbbb| 久久99精品久久久久久久久久久久 | 色天使久久综合网天天| 午夜视频一区二区| 日韩精品中文字幕在线一区| 国产精品综合久久| 亚洲欧洲www| 欧美日韩精品系列| 韩国午夜理伦三级不卡影院| 国产精品美女久久福利网站| 91福利小视频| 精品一区二区三区免费观看| 中文字幕一区在线观看视频| 欧美日韩国产免费一区二区 | 久久久久久毛片| 972aa.com艺术欧美| 午夜国产精品一区| 久久精品亚洲精品国产欧美| 色噜噜久久综合| 麻豆免费精品视频| 亚洲欧洲日韩在线| 在线播放中文一区| 成人免费毛片嘿嘿连载视频| 亚洲成年人网站在线观看| 国产日产亚洲精品系列| 欧美日韩免费高清一区色橹橹| 狠狠色综合播放一区二区| 亚洲欧美日本韩国| 久久久精品人体av艺术| 欧美精品第1页| 99这里都是精品| 久久超级碰视频| 亚洲黄色片在线观看| 久久久久久麻豆| 这里只有精品99re| 色婷婷综合久久久久中文一区二区 | 色老汉av一区二区三区| 另类小说色综合网站| 亚洲日本欧美天堂| 久久精品人人爽人人爽| 欧美日韩精品欧美日韩精品一 | 亚洲一区二区五区| 国产午夜精品福利| 日韩三级视频在线观看| 91久久精品日日躁夜夜躁欧美| 国产一区二区三区四| 天天综合日日夜夜精品| 亚洲视频小说图片| 国产精品天天看| 26uuu国产电影一区二区| 91精品国产欧美一区二区| 欧美伊人精品成人久久综合97| 国产福利视频一区二区三区| 久久99在线观看| 麻豆成人在线观看| 日韩精品成人一区二区三区| 亚洲一区免费在线观看| 亚洲精品中文在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 一区二区不卡在线播放| 亚洲欧美乱综合| 亚洲桃色在线一区| 国产精品人人做人人爽人人添| 精品国产网站在线观看| 欧美成人a∨高清免费观看| 91精品国产色综合久久久蜜香臀| 欧美日韩一区国产| 欧美日韩免费观看一区三区| 欧美视频中文一区二区三区在线观看 | 欧美午夜电影一区| 欧美性一二三区| 欧美熟乱第一页| 欧美肥大bbwbbw高潮| 宅男噜噜噜66一区二区66| 777xxx欧美| 日韩欧美国产三级电影视频| 欧美xfplay| 久久久久久一二三区| 中文字幕的久久| 中文字幕亚洲成人| 亚洲人亚洲人成电影网站色| 一区二区三区免费| 亚洲国产一区二区视频| 日韩成人dvd| 国产精品一区在线观看乱码| 国产成人鲁色资源国产91色综| 成人午夜又粗又硬又大| 日韩欧美你懂的| 久久亚洲免费视频| 国产精品毛片a∨一区二区三区| 中文字幕亚洲在| 天堂午夜影视日韩欧美一区二区| 日本欧美一区二区三区乱码| 国产精品1区2区| 91视视频在线直接观看在线看网页在线看| 成人美女视频在线看| 91国偷自产一区二区使用方法| 欧美精品v国产精品v日韩精品 | 91精品国产麻豆国产自产在线| 日韩欧美一区电影| 日本一区二区三区国色天香 | 99精品欧美一区二区三区综合在线| 色视频一区二区| 日韩欧美国产小视频| 国产精品福利av| 天天综合网 天天综合色| 国产精品羞羞答答xxdd| 91高清视频在线| 欧美色图激情小说| 欧美mv日韩mv| 亚洲一区在线视频| 久草在线在线精品观看| 99riav久久精品riav| 欧美va亚洲va在线观看蝴蝶网| 国产精品人人做人人爽人人添| 国产电影精品久久禁18| 蜜桃视频在线观看一区| av影院午夜一区| 日韩精品影音先锋| 亚洲一区在线看| 国产a级毛片一区| 欧美一区二区三区影视| 亚洲免费在线观看视频| 久久99这里只有精品| 欧美三级电影在线观看| 欧美激情在线一区二区| 奇米色777欧美一区二区| 91色视频在线| 久久久久国产精品厨房| 欧美aaaaaa午夜精品| 91久久精品一区二区| 欧美韩日一区二区三区四区| 久久精品国产精品青草| 日本道精品一区二区三区| 国产女人18毛片水真多成人如厕| 日本欧美加勒比视频| 欧美亚洲国产bt| 亚洲天堂成人在线观看| 国产一区二区不卡| 日韩欧美中文字幕一区| 午夜私人影院久久久久| 欧洲亚洲精品在线| 成人欧美一区二区三区白人| 国产精品白丝jk白祙喷水网站| 日韩一区二区三区在线| 偷拍自拍另类欧美| 欧美日韩美女一区二区| 亚洲欧美另类在线| 972aa.com艺术欧美| 中文字幕在线不卡一区二区三区| 高清不卡在线观看av| 国产亚洲精品资源在线26u| 国产尤物一区二区| 精品日韩在线一区| 久久国产剧场电影| 精品国产乱码久久久久久夜甘婷婷| 天天综合天天做天天综合| 欧美精品v日韩精品v韩国精品v| 亚洲高清视频在线| 欧美日韩国产系列| 免费不卡在线视频| 日韩欧美的一区| 久久97超碰色| 国产日韩一级二级三级| 国产宾馆实践打屁股91| 欧美国产一区二区在线观看| 粗大黑人巨茎大战欧美成人| 国产清纯在线一区二区www| 成人综合激情网| 亚洲日穴在线视频| 在线观看日产精品| 天堂av在线一区| 欧美电影免费观看完整版| 精品一区二区三区av| 久久久国产综合精品女国产盗摄| 国产成人免费网站| 亚洲欧美日韩一区二区 | 色一区在线观看| 亚洲曰韩产成在线| 3atv一区二区三区| 黄色成人免费在线| 欧美高清一级片在线观看| 波多野结衣欧美| 亚洲国产日日夜夜| 日韩精品中文字幕在线一区| 国产91富婆露脸刺激对白| 亚洲视频一二三| 欧美一区二区三区男人的天堂| 精品一二三四区| 最新国产の精品合集bt伙计| 欧美日韩国产一级| 盗摄精品av一区二区三区| 亚洲国产欧美在线人成| 精品国产乱码久久久久久图片|