资源简介
使用AStar算法实现了一个简单的demo,亲测可用,代码不多流程简单,一看就会
代码片段和文件信息
#include “astar.h“
#include
#include
AStar::AStar(int row int col)
{
m_col = col;
m_row = row;
}
AStar::~AStar()
{
openList.clear();
closeList.clear();
obstacleList.clear();
}
void AStar::lookPath(NodeItem &start NodeItem &goal)
{
this->goal = goal;
openList.clear();
closeList.clear();
//把起点插入到开启列表本函数插入元素按照元素的f(x)值进行升序排序保证第一个元素的f(x)值最小
addToOpenList(start);
list::iterator it;
while (openList.size()) {
it = openList.begin();
//取出f(x)值最小的元素
NodeItem first = *it;
qDebug()<<“node X:“< if(*it == goal)
{
qDebug()<<(*it).parent->x<<(*it).parent->y;
addPathNodeListByGoal(*it);
qDebug()<<“finished=============addPathNodeListByGoal“;
break;
}
openList.pop_front();
//把这个元素周围能到达的点添加进开启列表添加后按照元素的f(x)值的大小进行排序(建议使用二分法把当前元素插入开启列表)
closeList.push_back(*it);
addNeighBorNode(first);
}
printPathNodeList();
}
void AStar::addNode(const NodeItem ¢er int direct)
{
}
void AStar::addNeighBorNode(const NodeItem ¢er)
{
qDebug()<<“Center x: “< for(int i=0; i<8; i++)
{
if((center.x+dir[i][0])<0 || (center.x+dir[i][0])>=m_col || (center.y+dir[i][1])<0 || (center.y+dir[i][1])>=m_row)
{
qDebug()<<“hehehehehehehheehe“< continue;
}else
{
NodeItem item;
item.x = center.x+dir[i][0];
item.y = center.y+dir[i][1];
if(i%2==0)
{
item.g = center.g+10;
}else
{
item.g = center.g+14;
}
int xGap = abs(goal.x-item.x);
int yGap = abs(goal.y-item.y);
int minValue = xGap>yGap? yGap : xGap;
item.h = abs(xGap-yGap)*10+minValue*14;
item.f = item.fx();
item.parent = new NodeItem;
item.parent->x = center.x;
item.parent->y = center.y;
item.parent->g = center.g;
item.parent->h = center.h;
item.parent->f = center.f;
if(isOnCloseList(item))
{
continue;
}
if(!isOnOpenList(item))
{
addToOpenList(item);
}else
{
list::iterator it;
for(it = openList.begin(); it != openList.end(); it++)
{
if(item == (*it))
{
if(center.g+(i%2==0? 10:14)<(*it).g)
{
addToOpenList(item);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-11-29 16:23 AStar\
文件 1101 2018-08-13 17:45 AStar\AStar.pro
文件 45687 2018-11-29 16:23 AStar\AStar.pro.user
文件 5862 2018-08-22 10:43 AStar\astar.cpp
文件 1898 2018-08-18 14:02 AStar\astar.h
文件 177 2018-08-16 15:19 AStar\main.cpp
文件 1798 2018-08-17 17:15 AStar\rect.cpp
文件 761 2018-08-17 17:15 AStar\rect.h
文件 1778 2018-08-18 14:02 AStar\widget.cpp
文件 533 2018-08-16 15:39 AStar\widget.h
文件 441 2018-08-13 17:42 AStar\widget.ui
- 上一篇:ABC带约束优化算法
- 下一篇:微信小程序-教务系统源代码
相关资源
- 广州地铁路径模拟系统
- FCN模型实现图像分割配套资料分享.
- 打印模板工具
- 光线跟踪算法源码
- UE4赛车游戏.rar
- Cmake从入门到精通pdf教程
- 排课表程序拓扑排序
- AMR-LBM-OpenMP-2D.rar
- 完整的六层电梯模拟程序
- OpenGL绘制图形包含20多个基本
- WM算法C
- 实现进程调度算法---动态优先级
- QT_A+_记事本
- Qt 控件 实现 QComboBox输入自动提示功能
- 事件驱动 银行模拟系统
- OPENGL 字母模型
- question 6-student score management system.rar
- 八路抢答器代码
- 链表实现学生管理
- 数据结构实验-链式存储和顺序存储实
- 基于qt开发的会员管理系统
- 数据结构插队问题代码
- 输入10个整数,将其中最小的数与第一
- 科学计算导论实验报告
- 球体背面消隐课程设计及报告
- G.729的实现代码
- 东方电子DF9300通讯管理机包含规约:
- opencv检查图片中是否有人
- glaux系列包
- 无向连通图最小生成树
评论
共有 条评论