• 大小: 25KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-08-04
  • 语言: C/C++
  • 标签: A*算法  

资源简介

A*算法用于动态路径规划,实现功能:静态复杂环境下路径规划;简单地对地图分析并做出处理决策;动态环境下路径规划

资源截图

代码片段和文件信息

#pragma once
#include 
#include“resource.h“
#include 
#include 
using namespace std;
#define  TWO(ab)  (a<<16)+b
//////////////////////////////////////////
/******************公用数据*************/
HMENU hMenu;
#define BLACK 4
#define RED   33
#define WHITE 0
#define GREEN 1
#define BLUE  2
#define NUM  100
#define STEP 19 //STEP一点要大于3;
//#define EDGE (STEP/2-1)*2+1
struct Pos
{
int x;
int y;
int prex;
int prey;
void mem(){prex=x;prey=y;}
void now(int aint b){x=a;y=b;}
Pos(){x=y=prex=prey=0;}
};
static int cxClientcyClientprexpreymap[NUM][NUM]randxrandy;
static int countblockxblockyMovePainposMmove[20000]Rmovestepm;
static int ijextraxextraydbclckseed;
static HBRUSH hBrushwhite_Brushred_Brushgreen_brushblack_Brushblue_Brushyellow_Brush;
static HPEN white_penf_pen;
static char bu[30]buffer[20000];
static int posMAmoveA[20000]RmoveAstepmA;
#define MOVE 30
#define RAND 10
#define RANDA 11
CRITICAL_SECTION me;
static BOOL find;
int a[8][1];
static int Once;
static int prxpry;
static Pos RTRBLBLTCenterUp[STEP]Down[STEP]Right[STEP]Left[STEP];
///////////////////////////////////////////////////
static int x1y1x2y2;
///////////////////////////////////////////////
static int startxstartyendxendysavexsavey;
struct spaylist                
{
int name_x;
int name_y;
int h;
int g;
int f;
spaylist * father;
spaylist * next;
};
static spaylist *spd_list;
static spaylist *open_list;
static spaylist *close_list;
static spaylist *temp;
static spaylist *ptemp;
static spaylist *pSpy;//初始化SPD表
static spaylist *pOpen;//初始化OPEN表
static spaylist *pClose;//初始化CLOSE表
static int klgtempoflagcflag;
/////////////////////////////////////////////////////////////

/*************引用函数**************************/
void WINAPI DrawR(HDC hdcHBRUSH hBrushint aint b)
{
if(a<0||a>=NUM||b<0||b>=NUM)return;
RECT temp;
Selectobject(hdchBrush);
temp.left=a*blockx;
temp.top=(b+1)*blocky;
temp.right=(1+a)*blockx;
temp.bottom=b*blocky;
FillRect (hdc &temp hBrush);
}
void WINAPI DrawL(HDC hdcHPEN hPenint aint b)
{
if(a<0||a>=NUM||b<0||b>=NUM)return;
Selectobject(hdchPen);
MoveToEx(hdca*blockx(b+1)*blockyNULL);
LineTo(hdca*blockxb*blocky);
LineTo(hdc(1+a)*blockxb*blocky);
LineTo(hdc(1+a)*blockx(b+1)*blocky);
LineTo(hdca*blockx(b+1)*blocky);
}
//////////////////////////////////////////////////////////////////////////////////////
int judopen(int nxint ny)//判定点是否在OPEN表中
{
spaylist *q1;
q1=open_list;
if(NULL==q1)return 0;
while((ny != q1->name_y || nx != q1->name_x )&& q1->next != NULL)q1=q1->next;
if(nx == q1->name_x && ny == q1->name_y)
{
ptemp=q1;return 1;
}
else
return 0;
}
int judclose(int nxint ny)//判定点是否在CLOSE表中
{

spaylist *q1;
q1 = close_list;
while((ny != q1->name_y ||nx != q1->name_x )&& q1->next != NULL)q1=q1->next;
if(nx == q1->name_x

评论

共有 条评论