代码拉取完成,页面将自动刷新
#ifndef PATHFINDER_H
#define PATHFINDER_H
#include <vector>
#include <list>
const int kCost1=10; //直移一格消耗
const int kCost2=14; //斜移一格消耗
struct Point
{
int x,y; //点坐标,这里为了方便按照C++的数组来计算,x代表横排,y代表竖列
int F,G,H; //F=G+H
Point *parent; //parent的坐标,这里没有用指针,从而简化代码
Point(int _x,int _y):x(_x),y(_y),F(0),G(0),H(0),parent(nullptr) //变量初始化
{
}
};
class Astar
{
public:
void InitAstar(std::vector<std::vector<int>> &_maze);
std::list<Point *> GetPath(Point &startPoint,Point &endPoint,bool isIgnoreCorner);
private:
Point *findPath(Point &startPoint,Point &endPoint,bool isIgnoreCorner);
std::vector<Point *> getSurroundPoints(const Point *point,bool isIgnoreCorner) const;
bool isCanreach(const Point *point,const Point *target,bool isIgnoreCorner) const; //判断某点是否可以用于下一步判断
Point *isInList(const std::list<Point *> &list,const Point *point) const; //判断开启/关闭列表中是否包含某点
Point *getLeastFpoint(); //从开启列表中返回F值最小的节点
//计算FGH值
int calcG(Point *temp_start,Point *point);
int calcH(Point *point,Point *end);
int calcF(Point *point);
private:
std::vector<std::vector<int>> maze;
std::list<Point *> openList; //开启列表
std::list<Point *> closeList; //关闭列表
};
#endif // PATHFINDER_H
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。