一、搜索区化为二维数组。
节点被标记为可通过和不可通过。路径找到,就从一个节点向另一个。依次循环,直到目的地。
二、方法:从点A开始,检查相邻节点,向外扩展
三、思路大致如下:
首先有一张地图x*y的地图,为了方便,我们让每个点都用一个数字(10*x+y)来表示的话,也就是每个点唯一的属性。
1、定义一个包含点的信息的结构体,包含每个点的G值,F值,x,y坐标,它的父节点的x,y坐标。并定义此结构体型变量的数组,以存储路径。因为每个结构替里都包含了节点和它的父节点,因此我们可以用递归来输出路径。
2、定义一个链表,主要储存开启列表,关闭列表中的点的信息。之所以是链表,是为了对F值进行动态排列,每增加一个F值,我们都可以按一定顺序加入列表中。这样以来,每次的查找都会很方便。
3、此外,我们还需要设计一个将某点插入链表的函数,因为我们要很频繁的变换点的归属表。
4、点的归属表的判断
5、更新表的F值,因为我们要不断做出比较,路径节点不断移动,于是随着G值的改变,F值也会随之改变。
6、判断方向的可行性
7、求出可行方向的点坐标,即下面经常讲到的“新点”。
8、最后写A星主程序
开启列表=关闭列表=NULL——创建开启列表,head节点就是路径的起点,也就是第一个父节点
循环:把父节点从开启列表中删除——判断是否到达终点——是,break,跳出while
——将父节点加入到关闭列表中——判断开启列表是否为空——否,则将刚刚的新节点又作为父节点赋值给起点坐标——回到循环开头