青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

李錦俊(mybios)的blog

游戲開發 C++ Cocos2d-x OpenGL DirectX 數學 計算機圖形學 SQL Server

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

公告

QQ:30743734
EMain:mybios@qq.com

常用鏈接

留言簿(16)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 373303
  • 排名 - 67

最新評論

閱讀排行榜

評論排行榜

#ifndef?__ASTAR_SERACH_ALGO_H__
#define ?__ASTAR_SERACH_ALGO_H__

#include?
< Algorithm >
????
namespace ?fredazsq
{????
namespace ?linghuye
{????
????
/**/ /* ************************************************
**?尋路節點
************************************************
*/

template
< typename?TNodeLocation >
struct ?TAXNode
{????
????
float ???????G,?F;
????TNodeLocation??pos;
????TAXNode
* ???pParentNode;
????
bool ???????bClosed;???????? // ?使用狀態表明節點處于開放或關閉列表.
????
????
bool ? operator < ( const ?TAXNode & ?node)? const
????
{????
????????
return ?pos? < ?node.pos;
????}
????
}
;????
????
/**/ /* *****************************************************************************
**??封裝A*尋路算法
*******************************************************************************
**??作為棋盤信息提供類TField必須實現下列函數:
**??1.?bool?IsFieldThrough(TNodeLocation?pos)?const;????????????????????????????????????在?pos?位置是否為空,可通行.
**??2.?float?EvaluateStepCost(TNodeLocation?posFrom,?TNodeLocation?posTo,?TNodeLocation?posLastStep)?const;????????計算pos1,pos2到單步代價.
**??3.?float?EvaluateProbableCost(TNodeLocation?posFrom,?TNodeLocation?posTo)?const;????計算pos1,pos2到估算代價.
**??4.?TNodeLocation*?QueryNeiborLocations(TNodeLocation?pos,?int&?nNodeCount);?const????詢問pos的相鄰可通節點集
*******************************************************************************
**??TNodeLocation,節點位置
**??1.支持<,==,=操作符,如int.
*******************************************************************************
**??0.?初始化時傳入棋盤信息提供類的實例引用.
**??1.?使用主函數SearchPath進行搜索,使用QueryResultPath取得結果.
*****************************************************************************
*/

template
< class ?TField,? class ?TNodeLocation >
struct ?CAStar2DAlgo
{????
public :
????typedef?std::vector
< TNodeLocation > ????CResultPath;
????typedef?TAXNode
< TNodeLocation > ????????CAXNode;
????typedef?std::
set < CAXNode > ????????????CAXNodeSet;
????
????
struct ?CAXNodePriorityQueue???????????? // ?優先隊列?
???? {????
????????std::vector
< CAXNode *> ?m_heap;
????????
????????
static ? bool ?AXNodeCostSortPred(CAXNode * ?n1,?CAXNode * ?n2)
????????
{????
????????????
return ?(n1 -> G? + ?n1 -> F)? > ?(n2 -> G? + ?n2 -> F);
????????}

????????
????????
void ?push(CAXNode * ?pNode)
????????
{
????????????m_heap.push_back(pNode);
????????????std::push_heap(m_heap.begin(),?m_heap.end(),?
& CAXNodePriorityQueue::AXNodeCostSortPred);
????????}

????????
????????CAXNode
* ?pop()
????????
{????
????????????CAXNode
* ?pNode? = ?m_heap.front();
????????????std::pop_heap(m_heap.begin(),?m_heap.end(),?
& CAXNodePriorityQueue::AXNodeCostSortPred);
????????????m_heap.pop_back();
????????????
return ?pNode;
????????}

????????
????????
bool ?empty()
????????
{
????????????
return ?m_heap.empty();
????????}

????????
????????
void ?resort(CAXNode * ?pNode)
????????
{????
????????????std::vector
< CAXNode *> ::iterator?it? = ?std::find(m_heap.begin(),?m_heap.end(),?pNode);
????????????std::push_heap(m_heap.begin(),?it,?
& CAXNodePriorityQueue::AXNodeCostSortPred);
????????}

????????
????????
void ?clear()
????????
{
????????????m_heap.clear();
????????}

????}
;????
????????
public :????
????
const ?TField & ?m_field;
????TNodeLocation??m_posTarget;
????CAXNode
* ?m_ptrTargetNode;???????????????????? // ?Result?Node
????????
????CAXNodeSet?m_setNodes;????????????????????????
// ?All?nodes?in?use?
????CAXNodePriorityQueue?m_queOpenNodes;???????? // ?Cost?sorted?open?list
????????
public :????
????CAStar2DAlgo(
const ?TField & ?field)?:?m_field(field),?m_ptrTargetNode(NULL)
????
{????????
????}
????
????????
????
~ CAStar2DAlgo()
????
{????
????}
????
????????
????
void ?Reset()
????
{????
????????m_setNodes.clear();
????????m_queOpenNodes.clear();
????????m_ptrTargetNode?
= ?NULL;
????}
????
????????
public :????
????inline?CAXNode
* ?ClaimNode(TNodeLocation?pos,?CAXNode * ?pParentNode? = ?NULL)
????
{????
????????CAXNode?node;
????????node.pos?
= ?pos;
????????node.F?
= ?node.G? = ? 0 ;
????????node.bClosed?
= ? false ;???? // ?Default?is?open
????????node.pParentNode? = ?pParentNode;
????????
return ? & ( * m_setNodes.insert(node).first);
????}
????
????????
????
bool ?SearchPath(TNodeLocation?posStart,?TNodeLocation?posTarget)
????
{????
????????CAXNode
* ?pCurNode;
????????m_posTarget?
= ?posTarget;
????????
????????
// ?Add?start?node?into?open?list
????????CAXNode * ?pStartNode? = ?ClaimNode(posStart);
????????m_queOpenNodes.push(pStartNode);
????????
????????
while ( ! m_queOpenNodes.empty())
????????
{????
????????????
// ?Pick?lowest?cost?node
????????????pCurNode? = ?m_queOpenNodes.pop();
????????????
????????????
// ?Check?search?target
???????????? if (pCurNode -> pos? == ?m_posTarget)
????????????
{
????????????????m_ptrTargetNode?
= ?pCurNode;
????????????????
return ? true ;
????????????}

????????????
????????????
// ?Switch?node?from?OpenList?to?CloseList
????????????pCurNode -> bClosed? = ? true ;
????????????ProcessNeighborNodes(pCurNode);
????????}

????????
????????
return ? false ;
????}

????????
????
void ?ProcessNeighborNodes(CAXNode * ?pCurNode)
????
{????
????????CAXNode?tempNode;
????????
int ?nNodeCount? = ? 0 ;
????????TNodeLocation
* ?pLocs? = ?m_field.QueryNeiborLocations(pCurNode -> pos,?nNodeCount);
????????TNodeLocation?posLastStep?
= ?pCurNode -> pParentNode ? ?pCurNode -> pParentNode -> pos?:?pCurNode -> pos;
????????
????????
// ?For?each?neibors?
???????? for ( int ?i? = ? 0 ;?i? < ?nNodeCount;? ++ i)
????????
{????
????????????tempNode.pos?
= ?pLocs[i];
????????????
if (m_field.IsFieldThrough(tempNode.pos))
????????????
{????
????????????????CAXNodeSet::iterator?it?
= ?m_setNodes.find(tempNode);
????????????????
if (it? == ?m_setNodes.end())
????????????????
{????
????????????????????CAXNode
* ?pNewNode? = ?ClaimNode(tempNode.pos,?pCurNode);
????????????????????pNewNode
-> G? = ?pCurNode -> G? + ?m_field.EvaluateStepCost(pCurNode -> pos,?pNewNode -> pos,?posLastStep);
????????????????????pNewNode
-> F? = ?m_field.EvaluateProbableCost(pNewNode -> pos,?m_posTarget);
????????????????????m_queOpenNodes.push(pNewNode);
????????????????}
????
????????????????
else ? if ( ! it -> bClosed)
????????????????
{????
????????????????????CAXNode
& ?node? = ? * it;
????????????????????
float ?G? = ?pCurNode -> G? + ?m_field.EvaluateStepCost(pCurNode -> pos,?node.pos,?posLastStep);
????????????????????
if (G? < ?node.G)
????????????????????
{????
????????????????????????node.G?
= ?G;
????????????????????????node.pParentNode?
= ?pCurNode;
????????????????????????m_queOpenNodes.resort(
& node);
????????????????????}

????????????????}

????????????}

????????}

????}

????
????
/**/ /* *****************************************************************
????**??取回最終結果
????*****************************************************************
*/

????
bool ?QueryResultPath(CResultPath & ?path)
????
{????
????????
if ( ! m_ptrTargetNode)? return ? false ;
????????
????????CAXNode
* ?pNode? = ?m_ptrTargetNode;
????????
while (pNode)
????????
{????
????????????path.push_back(pNode
-> pos);
????????????pNode?
= ?pNode -> pParentNode;
????????}

????????
return ? true ;
????}

}
;

/**/ /* ******************************************************************************
**??TNodeLocation,節點位置
**??1.支持<,==?操作符號.
*******************************************************************************
*/

template
< typename?TNodeLocation >
struct ?CShisenFieldImpl
{????
????TNodeLocation
* ?QueryNeiborLocations(TNodeLocation?pos,? int & ?nRetCount)? const
????
{????
????????
static ? const ? int ?dy[ 4 ]? = ? {? 1 ,? 0 ,? 0 ,? - 1 ?} ;
????????
static ?TNodeLocation?posNeibors[ 4 ];???? // ?Single?thread
????????????????
????????nRetCount?
= ? 4 ;
????????
for ( int ?i? = ? 0 ;?i? < ? 4 ;?i ++ )
????????
{
????????????posNeibors[i].x?
= ?pos.x? + ?dx[i];
????????????posNeibors[i].y?
= ?pos.y? + ?dy[i];
????????}

????????
return ?posNeibors;
????}

????
????
float ?EvaluateStepCost(TNodeLocation?posFrom,?TNodeLocation?posTo,?TNodeLocation?posLast)? const
????
{????
????????
if (((posFrom.x - posTo.x)?? && ??(posLast.y - posFrom.y))?? || ??
???????????((posFrom.y
- posTo.y)?? && ??(posLast.x - posFrom.x)))
????????
{????
????????????
return ? 100 ;
????????}

????????
else ? return ? 1 ;
????}

????
????
float ?EvaluateProbableCost(TNodeLocation?pos1,?TNodeLocation?pos2)? const
????
{
????????
return ? 0 ;
????}

????
/**/ /* ????平滑優化
????float?EvaluateStepCost(MY_POSITION?posFrom,?MY_POSITION?posTo,?MY_POSITION?posLast)?const
????{????
????????int?cx1?=?posTo.x?-?posFrom.x;
????????int?cy1?=?posTo.y?-?posFrom.y;
????????int?cx2?=?posFrom.x?-?posLast.x;
????????int?cy2?=?posFrom.y?-?posLast.y;
????????return?((cx1?==?cx2??&&??cy1?==?cy2)??0?:?10)?+?((cx1??&&??cy1)??14?:?10);
????}
*/
????
}
;????
????
/**/ /* ******************************************************************************
**??最小路徑
******************************************************************************
*/

template
< typename?TNodeLocation >
struct ?CShortestPathFieldImpl
{????
????TNodeLocation
* ?QueryNeiborLocations(TNodeLocation?pos,? int & ?nRetCount)? const
????
{????
????????
static ? const ? int ?dx[ 4 ]? = ? {? 0 ,? - 1 ,? 1 ,?? 0 ?} ;
????????
static ? const ? int ?dy[ 4 ]? = ? {? 1 ,?? 0 ,? 0 ,? - 1 ?} ;
????????
static ?TNodeLocation?posNeibors[ 4 ];???? // ?Single?thread
????????????????
????????nRetCount?
= ? 4 ;
????????
for ( int ?i? = ? 0 ;?i? < ? 4 ;?i ++ )
????????
{
????????????posNeibors[i].x?
= ?pos.x? + ?dx[i];
????????????posNeibors[i].y?
= ?pos.y? + ?dy[i];
????????}

????????
return ?posNeibors;
????}

????
????
float ?EvaluateStepCost(TNodeLocation?posFrom,?TNodeLocation?posTo,?TNodeLocation?posLast)? const
????
{????
????????
return ? 1 ;
????}

????
????
float ?EvaluateProbableCost(TNodeLocation?pos1,?TNodeLocation?pos2)? const
????
{
????????
return ? 0 ;
????}

}
;

/**/ /* ******************************************************************************
**??最小路徑
******************************************************************************
*/

template
< typename?TNodeLocation >
struct ?CGamePathFieldImpl
{????
????TNodeLocation
* ?QueryNeiborLocations(TNodeLocation?pos,? int & ?nRetCount)? const
????
{????
????????
static ? const ? int ?dx[ 8 ]? = ? {? - 1 ,? 0 ,? 1 ,? - 1 ,? 1 ,? - 1 ,?? 0 ,?? 1 ?} ;
????????
static ? const ? int ?dy[ 8 ]? = ? {?? 1 ,? 1 ,? 1 ,?? 0 ,? 0 ,? - 1 ,? - 1 ,? - 1 ?} ;
????????
static ?MY_POSITION?posNeibors[ 8 ];
????????
????????nRetCount?
= ? 8 ;
????????
for ( int ?i? = ? 0 ;?i? < ? 8 ;?i ++ )
????????
{
????????????posNeibors[i].x?
= ?pos.x? + ?dx[i];
????????????posNeibors[i].y?
= ?pos.y? + ?dy[i];
????????}

????????
return ?posNeibors;
????}

????
????
float ?EvaluateStepCost(TNodeLocation?posFrom,?TNodeLocation?posTo,?TNodeLocation?posLast)? const
????
{????
????????
if (posFrom.x - posTo.x?? && ??posFrom.y - posTo.y)
????????
{
????????????
return ? 14 ;
????????}

????????
else ? return ? 10 ;
????}

????
????
float ?EvaluateProbableCost(TNodeLocation?posFrom,?TNodeLocation?posTo)? const
????
{
????????
return ?(abs(posFrom.x - posTo.x)? + ?abs(posFrom.y - posTo.y))? * ? 10 ;
????}

}
;

}
// ?namespace?linghuye
}
// ?namespace?fredazsq

#endif // __FIELD_SERACH_ALGO_H__
posted on 2006-11-19 01:40 李錦俊(mybios) 閱讀(1475) 評論(0)  編輯 收藏 引用 所屬分類: 數學、幾何和圖形學
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线观看亚洲a| 欧美国产精品中文字幕| 久久欧美肥婆一二区| 亚洲欧美视频在线| 性欧美长视频| 久久精品亚洲一区二区| 麻豆九一精品爱看视频在线观看免费| 久久综合九色综合欧美就去吻 | 性欧美大战久久久久久久久| 欧美一级黄色网| 农村妇女精品| 一本色道久久综合| 欧美在线免费播放| 欧美福利视频在线观看| 国产精品久久看| 狠狠色狠狠色综合日日小说| 亚洲精品国精品久久99热| 亚洲天堂第二页| 久久亚洲国产成人| 亚洲麻豆av| 久久九九热免费视频| 欧美天天综合网| 在线视频国产日韩| 午夜伦理片一区| 亚洲国产精品一区制服丝袜| 亚洲天堂av高清| 欧美成人午夜激情| 国产色爱av资源综合区| 亚洲精品国产精品国自产观看| 午夜精品久久久久久久久| 欧美成人精品在线观看| 亚洲欧美日韩精品一区二区| 欧美国产视频在线| 尤物yw午夜国产精品视频| 午夜精品三级视频福利| 亚洲成人资源| 久久精品99国产精品日本| 国产精品久久久99| 中文av字幕一区| 亚洲国产cao| 狂野欧美一区| 国产专区精品视频| 午夜精品一区二区在线观看| 国产精品美女久久久免费| 女人天堂亚洲aⅴ在线观看| 国产精品欧美日韩一区| 亚洲欧洲日产国产网站| 久久久一区二区三区| 亚洲午夜精品在线| 欧美日韩在线播放一区二区| 亚洲精品女人| 亚洲国产欧美日韩精品| 麻豆av福利av久久av| 国产亚洲欧美aaaa| 欧美一区二区啪啪| 亚洲免费影视| 国产视频一区在线| 欧美综合二区| 欧美一区视频| 好吊一区二区三区| 久久影院亚洲| 麻豆成人av| 亚洲靠逼com| 亚洲精选大片| 国产精品久久久久久久久动漫| 亚洲一区久久久| 亚洲午夜视频在线| 国产欧美日韩视频一区二区三区 | 欧美99久久| 美女亚洲精品| 宅男噜噜噜66一区二区| 这里只有视频精品| 国产亚洲第一区| 久久久伊人欧美| 欧美成人第一页| 在线综合欧美| 欧美一区二区视频在线| 亚洲高清不卡在线观看| 亚洲日韩成人| 国产免费亚洲高清| 欧美成人免费全部| 欧美色网一区二区| 久久久久久亚洲精品不卡4k岛国| 看欧美日韩国产| 亚洲线精品一区二区三区八戒| 亚洲欧美国产不卡| 亚洲欧洲精品一区二区| 一区二区三区久久网| 国产亚洲精品aa午夜观看| 欧美激情中文不卡| 国产女主播一区| 亚洲电影观看| 国产欧美日韩麻豆91| 亚洲激情视频在线播放| 国产日韩视频| 亚洲免费电影在线观看| 禁断一区二区三区在线| 99re这里只有精品6| 在线播放豆国产99亚洲| 亚洲夜间福利| 亚洲乱码精品一二三四区日韩在线 | 亚洲在线成人精品| 欧美日韩一区二区三区免费看 | 欧美一区二区三区在线观看视频| 久久久亚洲国产美女国产盗摄| 欧美伊久线香蕉线新在线| 国产欧美91| 欧美理论电影在线播放| 一区二区三区不卡视频在线观看| 一区二区三区高清视频在线观看| 国语精品一区| 亚洲素人一区二区| 一二三四社区欧美黄| 久久精品最新地址| 欧美一区=区| 欧美日韩第一区日日骚| 美日韩精品视频| 国产亚洲一区二区三区| aa国产精品| 日韩一级欧洲| 欧美v亚洲v综合ⅴ国产v| 久久福利视频导航| 国产精品香蕉在线观看| 亚洲美女av网站| 亚洲人成人77777线观看| 久久一二三国产| 美女脱光内衣内裤视频久久网站| 国产亚洲毛片| 久久精品三级| 久久全国免费视频| 国模精品娜娜一二三区| 欧美亚洲视频一区二区| 欧美亚洲一区二区三区| 国产精品一区二区三区免费观看 | 国产一区亚洲一区| 亚洲欧美日韩精品综合在线观看| 亚洲免费影视| 国产欧美一区二区三区久久人妖| 亚洲午夜羞羞片| 性感少妇一区| 国产亚洲精品久久飘花| 久久成人精品无人区| 美女免费视频一区| 亚洲激情成人在线| 欧美日韩p片| 亚洲五月婷婷| 久久九九久久九九| 一区免费观看| 麻豆精品传媒视频| 亚洲美女av黄| 欧美在线看片| 在线观看国产精品淫| 美女视频一区免费观看| 最新日韩欧美| 亚洲综合色激情五月| 国产麻豆成人精品| 久久成人资源| 欧美三日本三级三级在线播放| 国产精品久久999| 国产一区二区主播在线| 亚洲国产成人高清精品| 亚洲伦理精品| 国产精品国产自产拍高清av王其| 亚洲资源在线观看| 快播亚洲色图| 99精品国产在热久久| 国产精品影院在线观看| 久久青草欧美一区二区三区| 亚洲三级免费| 久久国产毛片| 91久久国产综合久久| 国产精品美女主播| 欧美mv日韩mv国产网站| 亚洲一级二级| 欧美激情1区| 欧美一激情一区二区三区| 亚洲大片在线| 国产精品影视天天线| 欧美激情久久久久| 校园激情久久| 一区二区三区欧美| 农村妇女精品| 欧美综合77777色婷婷| 在线视频欧美日韩精品| 亚洲国产国产亚洲一二三| 国产精品99免视看9| 蜜臀a∨国产成人精品| 亚洲欧美另类在线| 一本久久综合亚洲鲁鲁五月天| 毛片一区二区三区| 久久都是精品| 亚洲综合日韩| 在线一区观看| 亚洲麻豆国产自偷在线| 黄色成人小视频| 国产一区美女| 国产亚洲精品久久飘花| 国产精品裸体一区二区三区| 欧美日韩国产精品成人| 欧美高清视频一区二区三区在线观看 |