【A*路径规划算法 C++实现教程】
在这个示例中,我们首先读取地图文件,创建地图数组。然后定义起始点和🥳🥳🥳现在,通过本教程,您学习了 A路径规划算法的 C++ 实现。理解和掌握该算法对于开发路径规划相关的应用至关重要,希望本文能帮助您更好地运用 A算法。🛹🛹🛹从而实现更高效的路径规划,为各种应用场景提供更好的解决方案。后期会持续分享 A * 算法的相关实用案例🥳🥳🥳,科学地合理地进行开发和应用,为推动相关领域的发
【A*路径规划算法 C++实现教程】
A*路径规划算法 C++实现教程
在本篇博客中,我们将详细介绍如何使用 C++实现 A路径规划算法。A算法是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。它常用于游戏中的路径寻找、机器人导航等领域。
一、准备工作
我们需要包含以下头文件:
#include <iostream>
#include<windows.h>
#include<vector>
#include<cmath>
并使用 using namespace std; 来简化代码。
二、算法核心数据结构
- MyPoint:用于表示点的坐标以及相关的
g、h、f值,其中g表示从起点到当前点的实际代价,h表示从当前点到终点的估计代价,f = g + h是综合代价。 - Direct:方向枚举,定义了八个方向。
- PathNode:辅助地图节点,包含地图的值、是否是最短路径中的一点以及是否走过的信息。
- MyTreeNode:树的节点类型,包含点的位置、父节点以及子节点的向量。
三、Astar 类的实现
- 初始化(Init):
- 接收地图、地图高度、宽度、起始点和终点等信息。
- 建立辅助地图
pathMap,并初始化其中每个节点的状态。 - 创建开放列表的起始节点
beginTreeNode,并标记起点为已走过。
- 寻找路径(FindPath):
- 不断循环,找出当前节点周围的 8 个可行点,并将它们保存到开放列表中。
- 检查每个可行点是否在开放列表中,如果已经存在且当前点的
g值更小,则更新开放列表中对应点的g值、f值和父节点。 - 如果可行点不在开放列表中,则计算其
h值和f值,将其加入树中、开放列表和当前节点的子节点组。 - 找出开放列表中
f值最小的可行点,若该点为终点,则停止循环。 - 标记走过的点,并从开放列表中删除最小
f值可行点。 - 路径回溯,将最终路径存储在
retPath中。
- 打印路径(PrintRoute):
- 打印路径上的点坐标,并计算路径总长度。
- 打印路径地图(PrintRouteMap):
- 根据
pathMap打印路线地图,标记出最短路径中的点。
- 根据

四、算法具体实现步骤
- 在
Init函数中:- 为地图相关的变量赋值,并创建辅助地图。
- 初始化起始节点,并将其加入开放列表。
- 在
FindPath函数中:- 每次循环,对于当前节点的周围 8 个点进行处理:
- 根据方向计算点的位置,并检查斜对角是否可行走。
- 如果点可行走且不在障碍区域,并且对角可走,则进行进一步处理:
- 检查该点是否已经在开放列表中,如果是且当前
g值更小,则更新相关信息。 - 如果不在开放列表中,则计算
h值和f值,将其加入树中、开放列表和当前节点的子节点组。
- 检查该点是否已经在开放列表中,如果是且当前
- 如果开放列表为空,则结束循环。
- 找出开放列表中
f值最小的点,若为终点则停止循环,否则继续循环。 - 标记当前点为已走过,并从开放列表中删除最小
f值点。 - 路径回溯,将路径节点存储在
retPath中。
- 每次循环,对于当前节点的周围 8 个点进行处理:
- 在
PrintRoute函数中:- 打印路径上的点坐标,并计算路径长度。
- 在
PrintRouteMap函数中:- 根据
pathMap打印路线地图,标记出最短路径中的点。
- 根据
4.1 A*.cpp
Astar.cpp
#include"astar.h"
//初始化
void Astar::Init(int **_map,int height,int width,MyPoint _beginPoint,MyPoint _endPoint){
map = _map;
ROW = height;
COL = width;
VerticalDist = 10; //每格到相邻格直线距离10
ObliqueDist = 14; //每格到相邻格斜线距离14
beginPoint = _beginPoint;
endPoint = _endPoint;
//建立辅助地图
pathMap = new PathNode*[ROW];
for(int i=0;i<ROW;i++){
pathMap[i] = new PathNode[COL];
for(int j=0;j<COL;j++){
pathMap[i][j].isfind = false;
pathMap[i][j].isroute = false;
pathMap[i][j].value = map[i][j];
}
}
beginTreeNode = new MyTreeNode; //开放列表的起始节点
memset(beginTreeNode, 0, sizeof(MyTreeNode));
//向树中加入起点
beginTreeNode->pos = beginPoint;
//标记走过
pathMap[beginTreeNode->pos.row][beginTreeNode->pos.col].isfind = true;
pTemp = beginTreeNode;//初始化当前树节点为起始节点
pTempChild = NULL;//探路点
}
//初始化后,获取路径
void Astar::FindPath(){
while(1){
//找出探路点周围8个可行点,保存到开放列表
for(int i=0;i<8;i++){
bool canWalkObliquely = true;//斜对角是否可行走
pTempChild = new MyTreeNode;
memset(pTempChild, 0, sizeof(MyTreeNode));
pTempChild->pos = pTemp->pos;
switch(i)
{
case p_up:
pTempChild->pos.row = pTemp->pos.row -1;//只有行减1
pTempChild->pos.col = pTemp->pos.col;
pTempChild->pos.g = pTemp->pos.g + VerticalDist;
break;
case p_down:
pTempChild->pos.row = pTemp->pos.row +1;
pTempChild->pos.col = pTemp->pos.col;
pTempChild->pos.g = pTemp->pos.g + VerticalDist;
break;
case p_left:
pTempChild->pos.row = pTemp->pos.row;//行不变,列减1
pTempChild->pos.col = pTemp->pos.col -1;
pTempChild->pos.g = pTemp->pos.g + VerticalDist;
break;
case p_right:
pTempChild->pos.row = pTemp->pos.row;//行不变,列加1
pTempChild->pos.col = pTemp->pos.col +1;
pTempChild->pos.g = pTemp->pos.g + VerticalDist;
break;
case p_leftup:
if(isBarrier(pTemp->pos.row -1, pTemp->pos.col, pathMap) ||//判断当前点上边点是否为障碍
isBarrier(pTemp->pos.row, pTemp->pos.col -1, pathMap) //判断当前点左边点是否为障碍
){//判断斜角是否可走
canWalkObliquely = false;
break;
}
pTempChild->pos.row = pTemp->pos.row -1;
pTempChild->pos.col = pTemp->pos.col -1;
pTempChild->pos.g = pTemp->pos.g + ObliqueDist;
break;
case p_leftdown:
if(isBarrier(pTemp->pos.row +1, pTemp->pos.col, pathMap) ||//判断当前点下边点是否为障碍
isBarrier(pTemp->pos.row, pTemp->pos.col -1, pathMap) //判断当前点左边点是否为障碍
){//判断斜角是否可走
canWalkObliquely = false;
break;
}
pTempChild->pos.row = pTemp->pos.row +1;
pTempChild->pos.col = pTemp->pos.col -1;
pTempChild->pos.g = pTemp->pos.g + ObliqueDist;
break;
case p_rightup:
if(isBarrier(pTemp->pos.row -1, pTemp->pos.col, pathMap) ||//判断当前点上边点是否为障碍
isBarrier(pTemp->pos.row, pTemp->pos.col +1, pathMap) //判断当前点右边点是否为障碍
){//判断斜角是否可走
canWalkObliquely = false;
break;
}
pTempChild->pos.row = pTemp->pos.row -1;
pTempChild->pos.col = pTemp->pos.col +1;
pTempChild->pos.g = pTemp->pos.g + ObliqueDist;
break;
case p_rightdown:
if(isBarrier(pTemp->pos.row +1, pTemp->pos.col, pathMap) ||//判断当前点下边点是否为障碍
isBarrier(pTemp->pos.row, pTemp->pos.col +1, pathMap) //判断当前点右边点是否为障碍
){//判断斜角是否可走
canWalkObliquely = false;
break;
}
pTempChild->pos.row = pTemp->pos.row +1;
pTempChild->pos.col = pTemp->pos.col +1;
pTempChild->pos.g = pTemp->pos.g + ObliqueDist;
break;
}
//能走就加入当前节点的子节点组,并存入开放树openTree
if(isRoad(pTempChild->pos, pathMap) && //是否可行
canWalkObliquely //对角是否可走
){
//检查是否已经在开放列表中
bool isInOpenLst = false;
for(it=openTree.begin();it != openTree.end();it++){
if( (*it)->pos.row == pTempChild->pos.row &&
(*it)->pos.col == pTempChild->pos.col
){
isInOpenLst = true;
break;
}
}
if(isInOpenLst){
if( (*it)->pos.g > pTempChild->pos.g){
(*it)->pos.g = pTempChild->pos.g;//如果当前点g值大于开放列表中对映点的g值,就修改g
(*it)->pos.GetF();
(*it)->parent = pTemp;
pTemp->child.push_back(pTempChild);
}
}
if(isInOpenLst == false){
//计算h值
pTempChild->pos.h = GetH(pTempChild->pos,endPoint);
//计算f值
pTempChild->pos.GetF();
//入树
pTemp->child.push_back(pTempChild);
pTempChild->parent = pTemp;
//存入数组
openTree.push_back(pTempChild);
}
}
}//--end--找出探路点周围8个可行点,保存到开放列表
if(openTree.size() == 0) break;
//找出当前点周围最小f值可行点
it = openTree.begin();
minF_Iter = it;
//cout<<endl<<"在开放列表中的点: ";
for(it = openTree.begin();it != openTree.end();it++){
//cout<<(*it)->pos.row<<","<<(*it)->pos.col<<" ";
if( (*minF_Iter)->pos.f > (*it)->pos.f){
minF_Iter = it;
}
}
//system("pause");
//换层
if((*minF_Iter)->pos.row == endPoint.row &&
(*minF_Iter)->pos.col == endPoint.col
)
break;
pTemp = (*minF_Iter);
//标记走过
pathMap[pTemp->pos.row][pTemp->pos.col].isfind = true;
//把最小f值可行点从数组(open_list)中删除
openTree.erase(minF_Iter);
}//end--while(1)寻路
//路径回溯
MyTreeNode* node_line = (*minF_Iter);
while(1){
retPath.push_back(node_line);
pathMap[node_line->pos.row][node_line->pos.col].isroute = true;
node_line = node_line->parent;
if(node_line == NULL) break;
}
cout<<endl;
}
void Astar::PrintRoute(){
float routLength = 0;//路径总长度
cout<<endl<<"route"<<"("<<retPath.size()<<"): ";
for(it =retPath.begin();it != retPath.end(); it++){
cout<<(*it)->pos.row<<","<<(*it)->pos.col<<" ";
//计算路径长度并打印
if(it > retPath.begin()){
int row_t = (*it)->pos.row,col_t = (*it)->pos.col;//本次坐标
int row_t_l = (*(it -1) )->pos.row,col_t_l = (*(it -1) )->pos.col;//上次坐标
routLength += sqrt( pow( col_t - col_t_l,2) +pow( (row_t - row_t_l),2) );//pow次方函数
}
}
cout<<endl;
cout<<"routLength:"<<routLength;
}
void Astar::PrintRouteMap(){
//打印路线地图
cout << endl;
for(int i=0;i < ROW;i++){
for(int j=0;j < COL;j++){
if(pathMap[i][j].isroute)
cout<<"*";
else cout<<pathMap[i][j].value;
}
cout<<endl;
}
}
4.2 Astar.h
#include <iostream>
#include<windows.h>
#include<vector>
#include<cmath>
using namespace std;
using std::vector;
class Astar
{
public:
struct MyPoint{
int row;//行
int col;
int g,h,f;
void GetF(){
f = g + h;
}
};
//方向枚举
enum Direct{
p_up,p_down,p_left,p_right,p_leftup,p_leftdown,p_rightup,p_rightdown
};
//辅助地图节点
struct PathNode{
int value;//
bool isroute;//是否是最短路径中的一点
bool isfind;//是否走过
};
//树的节点类型
struct MyTreeNode{
MyPoint pos;
MyTreeNode* parent;
vector<MyTreeNode*> child;//用于存入该点的周围可行点?、、、、、、、、
};
int VerticalDist; //每格到相邻格直线距离10
int ObliqueDist; //每格到相邻格斜线距离14
int ROW,COL;//地图数组行数,列数
int **map;//地图数组
//建立辅助地图
PathNode **pathMap;
MyPoint beginPoint;
MyPoint endPoint;
MyTreeNode* beginTreeNode;//开放列表的起始节点,即开始节点
//创建指针:当前点、探路点
MyTreeNode* pTemp;//当前点
MyTreeNode* pTempChild;//探路点
//创建数组,保存子节点
vector<MyTreeNode*> openTree;//开放列表
vector<MyTreeNode*>::iterator minF_Iter;//用于存放最小f值可行点的迭代器
vector<MyTreeNode*>::iterator it;//用于检索的迭代器
vector<MyTreeNode*> retPath;//储存最终路径
//该点是否可行,可行返回true
bool isRoad(const MyPoint& point,PathNode **_pathMap){
if(point.col <0 || point.col >= COL ||
point.row <0 || point.row >= ROW
)//超出地图
return false;
if(1 == _pathMap[point.row][point.col].value)//该点为障碍
return false;
if(_pathMap[point.row][point.col].isfind)//该点已经走过
return false;
return true;
}
//判断点(row,col)是否为障碍物
bool isBarrier(int row, int col, PathNode **_pathMap){
if(col <0 || col >= COL ||
row <0 || row >= ROW
)//超出地图
return true;
if(1 == _pathMap[row][col].value)//该点为障碍
return true;
return false;
}
//计算h值
int GetH(const MyPoint& point,const MyPoint& endpos){
int x = abs(point.col - endpos.col);//取水平距离差绝对值
int y = abs(point.row - endpos.row);//取竖直距离差绝对值
return (x + y)*VerticalDist;
}
void Init(int **_map,int height,int width,MyPoint _beginPoint,MyPoint _endPoint);
void FindPath();
void PrintRoute();
void PrintRouteMap();
};
4.3 地图包
@@@@@@@@@.@@@@@@@.@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@.@@@@@.@@@@@@@@@@@@@*
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
..............................@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@.............................@.........@...................@.............................@.........
@.............................@.............................@.............................@.........
@.............................@...........................................................@.........
@.............................@.............................@...................@.........@.........
@...........................................................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@...................
@...................@.........@.............................@...................@.........@.........
....................@.........@.............................@.............................@.........
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
..............................@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@.............................@.........@...................@.............................@.........
@.............................@.............................@.............................@.........
@.............................@...........................................................@.........
@.............................@.............................@...................@.........@.........
@...........................................................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@...................
@...................@.........@.............................@...................@.........@.........
....................@.........@.............................@.............................@.........
@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
..............................@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@.............................@.........@...................@.............................@.........
@.............................@.............................@.............................@.........
@.............................@...........................................................@.........
@.............................@.............................@...................@.........@.........
@...........................................................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@...................
@...................@.........@.............................@...................@.........@.........
....................@.........@.............................@.............................@.........
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
..............................@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@.............................@.........@...................@.............................@.........
@.............................@.............................@.............................@.........
@.............................@...........................................................@.........
@.............................@.............................@...................@.........@.........
@...........................................................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@...................
@...................@.........@.............................@...................@.........@.........
....................@.........@.............................@.............................@.........
@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
@.............................@.............................@...................@@@.......@.........
..............................@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@...................@@@@@@@@@@@.............................@.............................@.........
@.............................@.........@...................@.............................@.........
@.............................@.............................@.............................@.........
@.............................@...........................................................@.........
@.............................@.............................@...................@.........@.........
@...........................................................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@.........@.........
@.............................@.............................@...................@...................
@...................@.........@.............................@...................@.........@.........
....................@.........@.............................@.............................@.........
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@
这个需要存在map文件夹中的map100x100_small.txt
五、调用示例
以下是一个调用示例代码:
5.1 Main.cpp
#include <iostream>
#include<cstring>
#include<fstream>//读写头文件
#include<time.h>
#include<windows.h>
#include"astar.h"
using namespace std; //使用standard命名空间
int main(){
system("mode con cols=120 lines=600");
//行row,列col
int height = 100;
int width = 100;
int start_x =1,start_y =1;
int end_x =5,end_y =95;
cout<<"地图尺寸(height*width): "<<height<<"*"<<width;
cout<<endl<<"开始点(y,x):"<<start_y<<","<<start_x<<endl;
cout<<"结束点(y,x):"<<end_y<<","<<end_x<<endl;
time_t time_start_ms,time_end_ms;//时间记录ms
//读取地图
string filepath="map/map100x100_small.txt";
ifstream fin(filepath.c_str());
if(!fin) {cout<<endl<<"文件不存在"<<endl; system("pause");}
int **pMap;//地图二维指针数组
pMap = new int* [height];
for(int i=0;i < height;i++){
pMap[i] = new int[width];
for(int j=0;j < width;j++){
char c;
fin>>c;
if('.' == c) pMap[i][j] = 0;
else pMap[i][j] = 1;
//cout<<pMap[i][j];
}
//cout<<endl;
}
Astar::MyPoint startPoint = {start_y,start_x};
Astar::MyPoint endPoint = {end_y, end_x};
Astar astar;
time_start_ms = clock();//a星寻路开始时间
astar.Init(pMap, height, width, startPoint, endPoint);
astar.FindPath();
time_end_ms = clock();//a星寻路结束时间
cout<<"a星寻路使用时间:"<<difftime(time_end_ms, time_start_ms)<<"ms";
astar.PrintRoute();
astar.PrintRouteMap();
system("pause");
}
5.2 测试输出
点击运行Main.cpp,输出下面内容
地图尺寸(height*width): 100*100
开始点(y,x):1,1
结束点(y,x):95,5
a星寻路使用时间:1006ms
route(489): 95,5 95,6 94,7 93,8 92,9 92,10 92,11 93,12 94,13 95,14 95,15 96,16 97,17 98,18 99,19 99,20 99,21 98,22 97,23 96,24 95,25 95,26 95,27 95,28 94,29 94,30 94,31 94,32 94,33 94,34 94,35 94,36 94,37 94,38 94,39 94,40 94,41 94,42 94,43 94,44 94,45 94,46 94,47 94,48 93,49 93,50 93,51 93,52 93,53 93,54 93,55 93,56 93,57 93,58 92,59 92,60 92,61 93,62 94,63 95,64 95,65 95,66 95,67 95,68 96,69 96,70 96,71 95,72 95,73 95,74 95,75 95,76 95,77 94,78 93,79 93,80 93,81 94,82 94,83 94,84 94,85 94,86 94,87 94,88 94,89 94,90 94,91 94,92 94,93 93,94 92,95 91,96 90,96 89,96 89,95 88,94 87,93 86,92 85,91 85,90 85,89 86,88 86,87 86,86 86,85 86,84 86,83 86,82 86,81 86,80 86,79 87,78 88,77 89,76 89,75 89,74 89,73 89,72 89,71 89,70 89,69 89,68 89,67 89,66 89,65 88,64 87,63 86,62 85,61 85,60 85,59 86,58 87,57 88,56 88,55 88,54 88,53 88,52 88,51 88,50 88,49 88,48 88,47 88,46 88,45 87,44 86,43 85,42 84,41 84,40 84,39 85,38 86,37 87,36 88,35 89,34 89,33 89,32 89,31 89,30 89,29 89,28 89,27 89,26 89,25 88,24 87,23 86,22 85,21 85,20 85,19 85,18 85,17 84,16 83,15 82,14 81,13 80,13 79,13 79,14 79,15 79,16 78,17 77,18 76,19 76,20 76,21 76,22 76,23 76,24 76,25 75,26 74,27 73,28 72,29 72,30 72,31 73,32 74,33 75,34 75,35 75,36 75,37 75,38 75,39 75,40 75,41 75,42 75,43 75,44 75,45 75,46 75,47 74,48 73,49 73,50 73,51 73,52 73,53 73,54 73,55 73,56 73,57 73,58 72,59 72,60 72,61 72,62 71,63 70,63 69,63 69,64 69,65 69,66 69,67 68,68 67,69 67,70 67,71 67,72 66,73 65,74 64,75 63,76 62,77 61,78 60,78 59,78 58,78 57,79 57,80 57,81 56,81 55,81 54,82 53,83 52,84 51,85 50,85 49,85 48,85 47,86 46,87 45,88 44,89 44,90 44,91 44,92 44,93 43,94 42,95 41,96 40,96 39,96 39,95 38,94 37,93 36,92 35,91 35,90 35,89 36,88 36,87 36,86 36,85 36,84 36,83 36,82 36,81 36,80 36,79 37,78 38,77 39,76 39,75 39,74 39,73 39,72 39,71 39,70 39,69 39,68 39,67 39,66 39,65 38,64 37,63 36,62 35,61 35,60 35,59 36,58 37,57 38,56 38,55 38,54 38,53 38,52 38,51 38,50 38,49 38,48 38,47 38,46 38,45 37,44 36,43 35,42 34,41 34,40 34,39 35,38 36,37 37,36 38,35 39,34 39,33 39,32 39,31 39,30 39,29 39,28 39,27 39,26 39,25 38,24 37,23 36,22 35,21 35,20 35,19 35,18 35,17 34,16 33,15 32,14 31,13 30,13 29,13 29,14 29,15 29,16 28,17 27,18 26,19 26,20 26,21 26,22 26,23 26,24 26,25 25,26 24,27 23,28 22,29 22,30 22,31 23,32 24,33 25,34 25,35 25,36 25,37 25,38 25,39 25,40 25,41 25,42 25,43 25,44 25,45 25,46 25,47 24,48 23,49 23,50 23,51 23,52 23,53 23,54 23,55 23,56 23,57 23,58 22,59 22,60 22,61 22,62 21,63 20,63 19,63 18,63 17,63 16,64 15,65 14,66 13,67 12,68 11,69 10,69 9,69 9,68 8,67 7,66 6,65 5,64 4,63 3,62 2,61 2,60 2,59 3,58 4,57 5,56 5,55 5,54 5,53 5,52 5,51 5,50 5,49 6,48 7,47 7,46 7,45 7,44 7,43 7,42 7,41 7,40 7,39 7,38 7,37 7,36 7,35 7,34 6,33 5,32 4,31 4,30 4,29 5,28 6,27 7,26 8,25 8,24 8,23 8,22 8,21 8,20 8,19 8,18 8,17 8,16 8,15 8,14 8,13 8,12 7,11 7,10 7,9 7,8 7,7 6,6 5,5 4,4 3,3 2,2 1,1
routLength:559.245
1111111110111111101111111111011111111111111111111111111111111111110111111111111011111011111111111111
1*00000000100000000010000000001000000000100000000010000000001000000000000000000010000000001000000000
10*00000001000000000100000000010000000001000000000100000000***00000000100000000010000000001000000000
100*000000100000000010000000001000000000100000000010000000*010*0000000100000000010000000001000000000
0000*000001000000000100000000***0000000010000000001000000*00100*000000100000000010000000001000000000
10000*0000100000000010000000*010*0000000100000000********0001000*00000100000000010000000001000000000
100000*00010000000001000000*00100*00000010000000*0100000000010000*0000100000000010000000001000000000
1000000*****00000000100000*0001000**************001000000000100000*000100000000000000000001000000000
100000000010**************00001000000000100000000010000000001000000*00100000000010000000001000000000
10000000001000000000100000000010000000001000000000100000000010000000**100000000010000000000000000000
111111111111111111111111111111111111111111111111111111111111111111111*111111110111111011111111110111
100000000010000000001000000000100000000010000000001000000000100000000*100000000010000000001000000000
10000000000000000000100000000000000000000000000000100000000000000000*0100000000010000000001000000000
1000000000100000000010000000001000000000100000000010000000001000000*00100000000010000000001000000000
100000000010000000001000000000100000000010000000001000000000100000*000100000000010000000001000000000
10000000001000000000100000000010000000001000000000100000000010000*0000100000000010000000001000000000
1000000000100000000010000000001000000000100000000010000000001000*00000100000000010000000001000000000
100000000010000000000000000000100000000010000000001000000000100*000000000000000010000000000000000000
100000000010000000001000000000100000000010000000001000000000100*000000100000000010000000001000000000
000000000010000000001000000000100000000010000000000000000000100*000000100000000000000000001000000000
111111111111111011111111111111111110111111111111011111111111111*111111111111111111111111111111111011
100000000010000000001000000000100000000010000000001000000000100*000000000000000010000000001000000000
10000000001000000000100000000***000000001000000000100000000****0000000100000000010000000001000000000
1000000000100000000010000000*010*0000000100000000**********01000000000100000000010000000001000000000
000000000010000000001000000*00100*00000010000000*010000000001000000000100000000010000000000000000000
10000000001000000000100000*0001000**************0010000000001000000000100000000010000000001000000000
1000000000100000000*******00001000000000100000000010000000001000000000100000000010000000001000000000
100000000010000000*010000000001000000000100000000010000000001000000000100000000010000000001000000000
10000000000000000*0010000000001000000000100000000010000000001000000000100000000000000000001000000000
1000000000100****00010000000001000000000100000000010000000001000000000100000000010000000001000000000
1111111111111*11111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1000000000100*00000010000000001000000000100000000010000000001000000000100000000010000000001000000000
10000000001000*0000010000000001000000000100000000010000000001000000000100000000010000000001000000000
100000000010000*000010000000001000000000100000000010000000001000000000100000000010000000001000000000
1000000000100000*0001000000000100000000***0000000010000000001000000000100000000010000000001000000000
10000000001000000*****0000000010000000*010*0000000100000000***000000001000000000100000000***00000000
0000000000100000000010*00000001000000*00100*00000010000000*010*0000000100000000**********010*0000000
10000000000000000000100*000000100000*0001000*000001000000*00100*00000010000000*01000000000100*000000
100000000010000000001000*0000010000*000010000************0001000*000001000000*0010000000001000*00000
1000000000100000000010000**********000001000000000100000000010000************000100000000010000**000
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111*111
100000000010000000001000000000100000000010000000001000000000100000000010000000001000000000100000*000
10000000000000000000100000000010000000001000000000100000000000000000001000000000100000000010000*0000
1000000000100000000010000000001000000000100000000000000000001000000000100000000000000000001000*00000
10000000001000000000100000000000000000000000000000100000000010000000001000000000100000000*****000000
1000000000100000000010000000001000000000100000000010000000001000000000100000000010000000*01000000000
100000000010000000001000000000100000000010000000001000000000100000000000000000001000000*001000000000
10000000001000000000100000000010000000001000000000100000000010000000001000000000100000*0001000000000
1000000000100000000010000000001000000000100000000010000000001000000000100000000010000*00001000000000
0000000000100000000000000000001000000000100000000010000000001000000000100000000010000*00001000000000
1111111110111111101111111111011111111111111111111111111111111111110111111111111011111*11111111111111
1000000000100000000010000000001000000000100000000010000000001000000000000000000010000*00001000000000
100000000010000000001000000000100000000010000000001000000000000000000010000000001000*000001000000000
10000000001000000000100000000010000000001000000000100000000010000000001000000000100*0000001000000000
0000000000100000000010000000000000000000100000000010000000001000000000100000000010*00000001000000000
100000000010000000001000000000100000000010000000000000000000100000000010000000001*000000001000000000
100000000010000000001000000000100000000010000000001000000000100000000010000000001*000000001000000000
1000000000000000000010000000001000000000000000000010000000001000000000100000000***000000001000000000
100000000010000000000000000000100000000010000000001000000000100000000010000000*010000000001000000000
100000000010000000001000000000100000000010000000001000000000100000000010000000*010000000000000000000
111111111111111111111111111111111111111111111111111111111111111111111011111111*111111011111111110111
100000000010000000001000000000100000000010000000001000000000100000000010000000*010000000001000000000
10000000000000000000100000000000000000000000000000100000000000000000001000000*0010000000001000000000
1000000000100000000010000000001000000000100000000010000000001000000000100000*00010000000001000000000
100000000010000000001000000000100000000010000000001000000000100000000010000*000010000000001000000000
10000000001000000000100000000010000000001000000000100000000010000000001000*0000010000000001000000000
1000000000100000000010000000001000000000100000000010000000001000000000100*00000010000000001000000000
100000000010000000000000000000100000000010000000001000000000100000000****000000010000000000000000000
10000000001000000000100000000010000000001000000000100000000010000000*0100000000010000000001000000000
000000000010000000001000000000100000000010000000000000000000100*****00100000000000000000001000000000
111111111111111011111111111111111110111111111111011111111111111*111111111111111111111111111111111011
100000000010000000001000000000100000000010000000001000000000100*000000000000000010000000001000000000
10000000001000000000100000000***000000001000000000100000000****0000000100000000010000000001000000000
1000000000100000000010000000*010*0000000100000000**********01000000000100000000010000000001000000000
000000000010000000001000000*00100*00000010000000*010000000001000000000100000000010000000000000000000
10000000001000000000100000*0001000**************0010000000001000000000100000000010000000001000000000
1000000000100000000*******00001000000000100000000010000000001000000000100000000010000000001000000000
100000000010000000*010000000001000000000100000000010000000001000000000100000000010000000001000000000
10000000000000000*0010000000001000000000100000000010000000001000000000100000000000000000001000000000
1000000000100****00010000000001000000000100000000010000000001000000000100000000010000000001000000000
1111111111111*11111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1000000000100*00000010000000001000000000100000000010000000001000000000100000000010000000001000000000
10000000001000*0000010000000001000000000100000000010000000001000000000100000000010000000001000000000
100000000010000*000010000000001000000000100000000010000000001000000000100000000010000000001000000000
1000000000100000*0001000000000100000000***0000000010000000001000000000100000000010000000001000000000
10000000001000000*****0000000010000000*010*0000000100000000***000000001000000000100000000***00000000
0000000000100000000010*00000001000000*00100*00000010000000*010*0000000100000000**********010*0000000
10000000000000000000100*000000100000*0001000*000001000000*00100*00000010000000*01000000000100*000000
100000000010000000001000*0000010000*000010000************0001000*000001000000*0010000000001000*00000
1000000000100000000010000**********000001000000000100000000010000************000100000000010000**000
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111*111
100000000010000000001000000000100000000010000000001000000000100000000010000000001000000000100000*000
100000000***00000000100000000010000000001000000000100000000***000000001000000000100000000010000*0000
10000000*010*000000010000000001000000000100000000**********010*0000000100000000***000000001000*00000
1000000*00100*000000100000000********************01000000000100*00000010000000*010************000000
10000**0001000**000010000****01000000000100000000010000000001000*****010******0010000000001000000000
1000000000100000*0001000*00000100000000010000000001000000000100000000***0000000010000000001000000000
10000000001000000*00100*0000001000000000100000000010000000001000000000100000000010000000001000000000
100000000010000000*010*00000001000000000100000000010000000001000000000100000000010000000001000000000
0000000000100000000***000000001000000000100000000010000000001000000000100000000010000000001000000000
请按任意键继续. . .
六、总结
在这个示例中,我们首先读取地图文件,创建地图数组。然后定义起始点和
🥳🥳🥳现在,通过本教程,您学习了 A路径规划算法的 C++ 实现。理解和掌握该算法对于开发路径规划相关的应用至关重要,希望本文能帮助您更好地运用 A算法。🛹🛹🛹从而实现更高效的路径规划,为各种应用场景提供更好的解决方案。后期会持续分享 A * 算法的相关实用案例🥳🥳🥳,科学地合理地进行开发和应用,为推动相关领域的发展贡献一点微薄之力。🤣🤣🤣
如果您有任何问题,可以通过 q group (945348278) 加入鹏鹏小分队,期待与您思维的碰撞😘😘😘
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)