资源简介
Astar C++源代码
Astar.h A*类头文件
Astar.cpp A*类源代码文件

代码片段和文件信息
// AStar.cpp: implementation of the CAStar class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “AStar.h“
#include
#include
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAStar::CAStar()
{
}
CAStar::~CAStar()
{
int sizetmp = mOpenSet.size();
if (sizetmp != 0)
{
mOpenSet.clear();
}
sizetmp = mCloseSet.size();
if (sizetmp != 0)
{
mCloseSet.clear();
}
if (mMap != NULL)
{
delete [] mMap;
mMap = NULL;
}
}
void CAStar::GetBegPt(Point2d BegPt)
{
mBegPt = BegPt;
mBegPt.F = 0;
mBegPt.G = 0;
mBegPt.IsValue = 1;
mBegPt.Parent = NULL;
}
void CAStar::GetEndPt(Point2d EndPt)
{
mEndPt = EndPt;
mEndPt.F = 0;
mEndPt.G = 0;
mEndPt.IsValue = 1;
mEndPt.Parent = NULL;
}
double CAStar::Getdis(Point2d A Point2d B)
{
return sqrt(pow((double)(A.x-B.x)2)+pow((double)(A.y-B.y)2))*10;
}
void CAStar::QuickSortToOpenset(int leftint right)
{
int low = lefthigh = right;
Point2d PtTemp middle;
middle = mOpenSet[left];
// middle = mOpenSet[(left+right)/2];//求中间值
// middle = mOpenSet[(rand()%(right-left))+left]; //生成大于等于left小于等于right的随机数
do
{
while ( (mOpenSet[low].F > middle.F) && (low < right) )//从左扫描大于中值的数
low++;
while ( (mOpenSet[high].F < middle.F) && (high > left) )//从右扫描小于中值的数
high--;
//找到了一对值交换
if(low <= high)
{
PtTemp = mOpenSet[high];
mOpenSet[high]=mOpenSet[low];
mOpenSet[low]=PtTemp;
low++;
high--;
}
}while(low <= high);//如果两边扫描的下标交错,就停止(完成一次)
//当左边部分有值(left if(left < high)
{
QuickSortToOpenset(lefthigh);
}
//当右边部分有值(right > low),递归右半边
if(right > low)
{
QuickSortToOpenset(lowright);
}
}
void CAStar::SortToOpenset()
{
Point2d Pttemp;
int sizetmp = mOpenSet.size();
for (int i = sizetmp-1 ; i > 0 ; i--)
{
for (int j = i ; j > 0 ; j--)
{
if (mOpenSet[i].F > mOpenSet[j].F)
{
Pttemp = mOpenSet[i];
mOpenSet[i] = mOpenSet[j];
mOpenSet[j] = Pttemp;
}
}
}
}
void CAStar::OpensetSort()
{
int size = mOpenSet.size();
// for (int i = 0 ; i < size ; i++)
// {
// cout< // }
if (size != 0)
{
QuickSortToOpenset(0 size-1);
}
// cout<<“open:“< // for (int i = 0 ; i < size ; i++)
// {
// cout< // }
}
//PA为A的前一个点,B为目标节点,获取A的父节点移动到A的当前开销
int CAStar::GetNowG(Point2d PA Point2d A)
{
int res ;
// if (PA.x != A.x && PA.y == A.y)
// {
// res = abs(PA.x - A.x);
// }
// else if (PA.x == A.x && PA.y != A.y)
// {
// res = abs(PA.y - A.y);
// }
// else
// {
res = Getdis(PAA);
// }
return res;
}
//获取A到达终点的预计开销
int CAStar:
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
.CA.... 7232 2010-05-07 16:01 Astra\AStar.cpp
.CA.... 1496 2010-05-03 09:19 Astra\AStar.h
.CA.... 602 2010-05-07 15:45 Astra\CDijkstra.cpp
.CA.... 4688 2010-05-02 20:01 Astra\CDijkstra.dsp
.CA.... 543 2010-04-30 21:14 Astra\CDijkstra.dsw
.CA.... 82944 2013-06-30 14:17 Astra\CDijkstra.ncb
.CA.... 48640 2013-06-30 14:17 Astra\CDijkstra.opt
.CA.... 1752 2013-06-30 14:16 Astra\CDijkstra.plg
.CA.... 50970 2013-06-30 14:16 Astra\Debug\AStar.obj
.CA.... 183895 2010-05-02 16:31 Astra\Debug\AStar.obj.enc
.CA.... 34955 2010-05-02 14:26 Astra\Debug\AStra.obj
.CA.... 315445 2013-06-30 14:16 Astra\Debug\CDijkstra.exe
.CA.... 441464 2013-06-30 14:16 Astra\Debug\CDijkstra.ilk
.CA.... 16153 2013-06-30 14:16 Astra\Debug\CDijkstra.obj
.CA.... 400336 2013-06-30 14:16 Astra\Debug\CDijkstra.pch
.CA.... 1393664 2013-06-30 14:16 Astra\Debug\CDijkstra.pdb
.CA.... 1824 2013-06-30 14:16 Astra\Debug\StdAfx.obj
.CA.... 173056 2013-06-30 14:16 Astra\Debug\vc60.idb
.CA.... 159744 2013-06-30 14:16 Astra\Debug\vc60.pdb
.CA.... 1226 2010-04-30 21:14 Astra\ReadMe.txt
.CA.... 296 2010-04-30 21:14 Astra\StdAfx.cpp
.CA.... 769 2010-04-30 21:14 Astra\StdAfx.h
.C.D... 0 2013-06-30 14:16 Astra\Debug
.C.D... 0 2013-06-30 14:17 Astra
----------- --------- ---------- ----- ----
3321694 24
相关资源
- CCS FFT c语言算法
- 小波变换算法 c语言版
- 3des加密算法C语言实现
- DES加密算法C语言实现
- 线性回归算法c语言实现
- 基于C语言的模拟退火算法
- C语言实现的DES对称加密算法
- 用VC6.0实现多边形扫描线填充算法
- c语言编写的货郎担算法
- Em算法(使用C++编写)
- STM32烧写算法flash包
- 永磁同步电机的FOC控制算法
- Proteus仿真:PID算法输出.rar
- 一个模糊PID温度控制算法源代码
- 经典滤波算法
- KMP算法C语言程序
- SVM算法实现(源码+文档)
- 算法A律U律实现
- 人工蜂群算法.docx
- BlowFish加密算法
- C语言常用算法源代码
- c++数组快排算法
- 算法表达式求值.cpp
- PID算法.c
- QR二维码C++源码 算法实现
- 基于opencv漫水填充算法综合
- 信息学奥赛一本通——算法部分
- 银行家算法分配资源的模拟实现(m
- C语言程序设计50例.docx
- 常见排序算法比较.cpp
评论
共有 条评论