资源简介
这是A*算法的最短路径搜索代码,代码完整,可以直接打开运行,也可以直接拷贝到需要用的项目中。 注释非常详细,小白一看就能懂,附带伪代码
一步步看 大家多多学习又不明白可以联系
代码片段和文件信息
#include “afx.h“
#include “math.h“
#include
#define X_MAX 15
#define Y_MAX 15
int map[X_MAX][Y_MAX] ={000111100001001//0
010111100001001//1
011111100001001//2
011111100001001//3
000111100001001//4
000101111001001//5
000001101001001//6
000111111001001//7
000111101101001//8
000111110001001//9
000111101101001//10
000111110101001//10
000111101011001//12
000111110001001//13
000111100001001//14
};
struct Node
{
Node()
{
Parant=NULL;
Child=NULL;
}
~Node()
{
delete Parant;
delete Child;
}
int x;
int y;
double g; //权值
double h; //到终点的距离
double f; //估价值
Node * Parant;
Node * Child;
};
std::vector m_OpenList;
std::vector::iterator m_OpenListIter;
std::vector m_CloseList;
std::vector::iterator m_CloseListIter;
std::vector m_ResultList;
std::vector::iterator m_ResultListIter;
//搜索Open中估价值最小的点
Node * SearchOpenSmallestNode()
{
Node * p;
m_OpenListIter=m_OpenList.begin();
p=*m_OpenListIter;
for (;m_OpenListIter!=m_OpenList.end();m_OpenListIter++)
{
if((*m_OpenListIter)->ff)
{
p=*m_OpenListIter;
}
}
return p;
}
bool FindInOpen(Node * param)
{
m_OpenListIter=m_OpenList.begin();
for (;m_OpenListIter!=m_OpenList.end();m_OpenListIter++)
{
if ((*m_OpenListIter)->x==param->x&&(*m_OpenListIter)->y==param->y)
{
return true;
}
}
return false;
}
bool FindInClose(Node * param)
{
m_CloseListIter=m_CloseList.begin();
for (;m_CloseListIter!=m_CloseList.end();m_CloseListIter++)
{
if ((*m_CloseListIter)->x==param->x&&(*m_CloseListIter)->y==param->y)
{
return true;
}
}
return false;
}
void UpdateValue(Node * Param)
{
}
void ChildNode(Node * parnodeint xint yint xendint yend)
{
if (x<0||y<0||x>=X_MAX||y>=Y_MAX||map[x][y]!=1) //超出边界
{
return;
}
Node * NewNode=new Node;
NewNode->x=x;
NewNode->y=y;
bool inOpentip=FindInOpen(NewNode);
bool inClosetip=FindInClose(NewNode);
//不在OPEN表和CLOSE表中
if (!inOpentip&&!inClosetip)
{
//求估价值
NewNode->g=parnode->g+1;
NewNode->h=(double)sqrtf((NewNode->x-xend)*(NewNode->x-xend)+(NewNode->y-yend)*(NewNode->y-yend));
NewNode->f=NewNode->g+NewNode->h;
NewNode->Parant=parnode;
parnode->Child=NewNode;
//加入Open链表
m_OpenList.push_back(NewNode);
}
else if (inOpentip)
{
//求估价值
double g=parnode->g+1;
double h=(double)sqrtf((NewNode->x-xend)*(NewNode->x-xend)+(NewNode->y-yend)*(NewNode->y-yend));
double f=g+h;
bool Updatetip=false;
m_OpenListIter=m_OpenList.begin();
for (;m_OpenListI
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3983 2014-11-17 09:16 FindPath\FindPath\FindPath.vcxproj
文件 143 2014-11-15 11:32 FindPath\FindPath\FindPath.vcxproj.user
文件 955 2014-11-15 11:44 FindPath\FindPath\FindPath.vcxproj.filters
文件 8911 2014-11-17 10:07 FindPath\FindPath\main.cpp
文件 891 2014-11-15 11:32 FindPath\FindPath.sln
..A..H. 12800 2014-11-17 10:09 FindPath\FindPath.suo
文件 1140 2014-11-17 10:13 FindPath\伪代码.txt
目录 0 2014-11-15 11:32 FindPath\FindPath
目录 0 2014-11-15 11:32 FindPath
----------- --------- ---------- ----- ----
28823 9
- 上一篇:STM32读写时钟PCF8563
- 下一篇:卷轴FLASH动画
相关资源
- 图像的载入显示和输出程序by浅墨
- 扩展的欧几里得算法实现求乘法逆元
- windef.h && windows.h
- 心电算法中检测PT波的详细算法
- 免疫克隆选择算法
- 变步长自适应算法在雷达旁瓣对消系
- 自己分装的一个winhttp类
- 距离向量算法
- 磁盘调度算法课设及源码
- 非参数方法及EM算法及R语言实现
- 使用C51实现128位AES加密算法
- 纯C实现语音合成支持windows和linux,亲
- 自适应中心加权的改进均值滤波算法
- 基于粒子群算法的机组组合计算
- STM32的傅里叶算法
- eye in hand 手眼标定算法方案
- 基于em算法的图像分割报告
- 普通快速排序随机快速排序算法实验
- 区域生长算法对于遥感影像的应用
- 小型公司工资管理系统设计
- SJFFCFSHRRN
- k近邻算法和朴素贝叶斯算法课件
- VC中利用多线程技术实现线程之间的通
- KNN K-最近邻分类算法源代码
- 软件的层架构设计详解
- memetic研究算法
- 哈夫曼编码算法实现
- RK语音通话3A算法集成说明及参数调试
- opencv3.4.1人脸识别小程序
- 一种改进的TOA——AOA混合定位算法
评论
共有 条评论