资源简介
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
相关资源
- 算法子集树问题的c语言代码
- 画多边形C++算法源代码
- 多边形边缘填充算法实现
- Cantor集算法实现
- 双三次B样条曲面算法
- 迷宫问题的求解算法实现
- Bresenham直线算法的C++实现
- 用贪心算法求解哈密顿回路
- 边界跟踪算法的实现,图像处理 c++
- TDOA定位算法C语言代码
- 八数码问题A星算法实现
- C语言编写的GZIP压缩算法含工程文件,
- vc++6.0DES加密算法+数据加密+文件加密
- 链路状态路由算法的实现
- C++简单实现关联规则挖掘中Apriori算法
- DH算法代码实现
- 开放源码的计算机图形学几何算法包
- 0-1背包问题-递归算法 c语言实现
- 最优化算法的无约束算法的单纯形法
- 假设以邻接矩阵作为图的存储结构,
- 已知head为单链表的表头指针,链表中
- 又一个douglas道格拉斯VC++算法
- 堆排序算法严蔚敏数据结构
- 遗传算法解决TSP问题 旅行商问题 程序
- 贪心算法解决骑士游历问题C语言版
- 算法实验:DAG图的最长路径
- 生产者消费者算法图形化演示系统
- 密码学快速取模指数算法C代码
- 哈夫曼树 C++算法
- 八数码的深度优先算法c++实现
评论
共有 条评论