资源简介
A*算法的C++实现,注释详尽,直接编译运行
代码片段和文件信息
#include
#include
#include
#include “math.h“
#include
using namespace std;
#define kSortOpen sort(open.begin() open.end()MySort);
class CPoint
{
public:
CPoint()
{
this->x = 0;
this->y = 0;
this->f = 0;
this->g = 0;
this->h = 0;
this->parent = NULL;
}
CPoint(int x int y)
{
this->x = x;
this->y = y;
this->f = 0;
this->g = 0;
this->h = 0;
this->parent = NULL;
}
//xy坐标
int x y;
//f = g + h g:从父节点到该点消耗的步数 h:估价函数,这里直接取当前点到终点所消耗的步数
int f g h;
CPoint* parent;
bool operator == (const CPoint& p)
{
if (this->x == p.x && this->y == p.y)
{
return true;
}
return false;
}
bool operator < (const CPoint &p)
{
if (this->f <= p.f)
{
return true;
}
else
{
return false;
}
}
};
struct List
{
CPoint* parent next;
};
typedef std::vector vecCpoint;
bool Exsit(vecCpoint& vec CPoint* p)
{
vecCpoint::iterator it = vec.begin();
for (; it != vec.end(); it++)
{
if ((*(*it)) == (*p))
{
return true;
}
}
return false;
}
CPoint* FindItem(vecCpoint& vecCPoint* p)
{
if (Exsit(vecp))
{
vecCpoint::iterator it = vec.begin();
for (; it != vec.end(); it++)
{
if ((*(*it)) == (*p))
{
return *it;
}
}
return NULL;
}
return NULL;
}
vecCpoint::iterator FindItemIter(vecCpoint& vecCPoint* p)
{
if (Exsit(vecp))
{
vecCpoint::iterator it = vec.begin();
for (; it != vec.end(); it++)
{
if ((*(*it)) == (*p))
{
return it;
}
}
return vec.end();
}
return vec.end();
}
void Score(CPoint* beginner CPoint* ended CPoint* cur)
{
cur->g = abs(beginner->x - cur->x) + abs(beginner->y - cur->y);
cur->h = abs(ended->x - cur->x) + abs(ended->y - cur->y);
cur->f = cur->g + cur->h;
// cout << “g = “ << cur->g << endl;
// cout << “h = “ << cur->h << endl;
// cout << “f = “ << cur->f << endl;
}
bool FindChildren(CPoint* first char map[10][10] CPoint* beginnerCPoint* endedvecCpoint& openvecCpoint& close)
{
bool bValid = false;
if (first->x - 1 >= 0 && map[first->x - 1][first->y] == ‘1‘)
{
CPoint* left = new CPoint(first->x - 1 first->y);
Score(beginner ended left);
if (!Exsit(openleft) && !Exsit(closeleft))
{
left->parent = first;
open.push_back(left);
bValid = true;
}
else if (Exsit(openleft))
{
CPoint* old_open = FindItem(openleft);
if (left->f < old_open->f)
{
old_open->f = left->f;
old_open->
- 上一篇:蚂蚁算法MFC实现执行文件
- 下一篇:用I/O命令访问PCI总线设备配置空间
相关资源
- 自动解决智能拼图,A*算法+生成可解
- 用C++stl与QT实现的A*算法Demo
- C++实现A*算法十五数码问题
- 八数码问题数字华容道,九宫格深度
- 基于A*算法的十五数码程序 C语言版
- A*算法求解八数码--演示程序MFC
- A*算法用于动态路径规划
- A*算法 A star算法 C语言版
- A*算法vc++源码
- 人工智能 A*算法 八数码问题 C++ 报告
- 人工智能 八数码问题 A*算法 C语言
- 从广度优先搜索深度优先搜索A*算法多
- A*星算法matlab实现
-
利用ja
vasc ript在网页实现八数码启 - A*算法解决八数码问题C++
- A星算法,A*算法C++实现,8数码求解
- 迷宫问题A*算法
- 传教士野人渡河带界面
- A*算法 机器人路径规划
- A*算法解迷宫
- C语言实现A*算法解决传教士和野人渡
- C++实现8方向A*算法
- C++实现的高效A*算法
- 8数码游戏 A*算法 C++实现
- spath(A*算法的C语言源代码)
- A*算法在ROS上的简单移植
- ROS用A*算法源代码
评论
共有 条评论