无障碍 Astar 地图为图结构 C++简单实现

 有问题或者写的不对的地方 欢迎交流指正~

 #include
 #include
 #include
 #include
 #include
 #include
 #include
 
 using namespace std;
 #define INF (0x23333333)
 #define MAXN (302) 
 
 int g[15];
 int h[15];
 int f[15];
 bool in_open[10];
 bool in_close[10];
 int min;//记录最小的f值 
 int start_x,start_y,end_x,end_y;
 int start,end;
 bool flag = false;
 //2平米检测 返回的最近的拐点
 /*int matchpoint(int x,int y){
 	int num;
 	return num;
 }
 */ 
 struct Point{
 	int id;
 	int x,y,g,h,f;
 	//不用显式初始化定义结构体变量 
 	Point(){}
 	//只初始化…… 
 	Point(int _x,int _y):x(_x),y(_y) {}
 	
// 	bool operator<(const Point &o) const
// 	{
// 		return f>o.f;
//	 }
	friend bool operator < (Point p1,Point p2){
		return p1.f>p2.f;
	}
 }pt[20];
 
  vector Adj[MAXN];
  queue path;
 void find_path(){
	 in_open[start] = true;
	priority_queue open_list;
 	open_list.push(pt[start]);//加起点
// 	path.push(pt[start]);
 	Point c,n;//当前点 ,邻接点 
 	for(int i=0;i<10;i++){
 		 pt[i].g =INF;
 		 pt[i].h = abs(pt[i].x-pt[end].x) + abs(pt[i].y-pt[end].y);
 		 pt[i].f = pt[i].g +pt[i].h;
	 }
 	while(open_list.size())
	 {
	 	c = open_list.top(); //最小的choose为当前的 
		path.push(c);
	 	printf("%d",c.id);
	 	if(c.id==end){ 
	 	flag = true;
		 break;//到终点则跳出循环 
	}
	 	open_list.pop(); //当前结点加入关闭列表中
	 	in_close[c.id] = true;
		 for(int i=0;i

 

你可能感兴趣的:(Astar,A*,最短路径,算法)