www.pudn.com > PathSearch.rar > PathFinder.h
////////////////////////////////////////////////////////////////// // CPathFinder class // // A* 算法接口,针对迷宫问题设计 #ifndef _PATHFINDER_H_ #define _PATHFINDER_H_ #include//节点类 class _asNode { public: _asNode(int a = -1,int b = -1) : x(a), y(b), number(0), numchildren(0) { parent = next = NULL; memset(children, 0, sizeof(children)); } int f,g,h; // A*算法的估价函数值等 int x,y; // 坐标 int numchildren; int number; // x*30+y _asNode *parent; // 父节点 _asNode *next; _asNode *children[8]; // 8领域 }; // 堆栈 struct _asStack { _asNode *data; _asStack *next; }; typedef int(*_asFunc)(int, int, void *); //迷宫类 class CPathFinder { public: CPathFinder(); ~CPathFinder(); bool GeneratePath(int, int, int, int); void SetValid(_asFunc sv) { udValid = sv; } void SetCost(_asFunc sc) { udCost = sc; } void SetData(void *sd) { m_pCBData = sd; } void SetRows(int r) { m_iRows = r; } _asNode *GetBestNode() { return m_pBest; } protected: int m_iRows; // 用来计算节点的个数 int m_iSX, m_iSY, m_iDX, m_iDY, m_iDNum; void *m_pCBData; // 已经经过的节点 _asNode *m_pOpen; // OPEN表 _asNode *m_pClosed; // CLOSE表 _asNode *m_pBest; // 最好的节点 _asStack*m_pStack; // 堆栈 _asFunc udCost; // 用户定义的费用 _asFunc udValid; // 用户定义的有效费用 // 一些结构操作函数 void AddToOpen(_asNode *); void ClearNodes(); void CreateChildren(_asNode *); void LinkChild(_asNode *, int, int); void UpdateParents(_asNode *); // 堆栈操作函数 void Push(_asNode *); _asNode *Pop(); _asNode *CheckList(_asNode *, int); _asNode *GetBest(); // 内联函数 inline int Coord2Num(int x, int y) { return x * m_iRows + y; } }; #endif