A*寻路算法源码
Astar.h源码
#pragma once
#include "stdafx.h"
#include "MinHeap.h"
class AstarNodeRun;
class Astar;
class AstarRunData;
class AstarNode
{
public:
int nodeIndex;
int connectNum;
AstarNode** connects;
AstarNode(int nodeIndex):connectNum(0),connects(NULL){
this->nodeIndex = nodeIndex;}
virtual double getH(AstarNode* target) = 0;
virtual double getCost(int i) = 0;
};
class AstarNodeRun : public MinHeapNode
{
public:
double g;
double h;
AstarNode* node;
AstarNodeRun* parent;
unsigned short pathID;
bool isOpen;
AstarNodeRun():MinHeapNode(0),g(0),h(0),node(NULL),parent(NULL),pathID(0),isOpen(false)
{
}
double f()
{
return g+h;
}
};
class AstarRunData
{
public:
Astar* astar;
unsigned short pathID;
AstarNodeRun** runNodes;
int nodeCount;
MinHeap* openNodesHeap;
AstarRunData(int nodeNum, AstarNode** nodes);
void clearPathId();
void init(Astar* p);
~AstarRunData();
};
class Astar
{
private:
static unsigned short nextPathID;
public:
unsigned short pathID;
AstarRunData* runData;
AstarNode* startNode;
AstarNode* endNode;
int searchedNodes;
Astar();
AstarNodeRun* getNodeRun(int nodeIndex);
void init(AstarRunData* runData, AstarNode* start, AstarNode* end);
vector<AstarNode*> findPath();
~Astar();
};
Astar.cpp源码
#include "stdafx.h"