预习日志 项目三 基于A*算法的迷宫

1. 设计数据结构表示迷宫。内存中的迷宫表示数据结构可以用二维矩阵。矩阵元素的值代表对应位置不同状态:入口,出口,过道,墙。

2. 初始化迷宫。生成迷宫,然后将玩家放置在某个位置(入口之一,或者就过道某处)。对于迷宫M,玩家初始位置为S,指定出口为E。如果存在从S到E的一条连通的道路,则称为S、E之间的通路。

(1)存储迷宫。

(2)读入迷宫。

3. 寻找通路。

(1)手工交互方式。如果存在通路,玩家在规定时间交互到达指定出口,成功。如果不存在通路,玩家判断没有通路,成功。否则,挑战失败。

(2)自动模式。算法判定是否存在通路。如果存在,显示所有通路。

prim算法随机生成迷宫:

先选择1个路桩设为红色,将其周围0全标为蓝色,随机选择一个蓝色0,然后看红色1隔着这个蓝色0对面的格子,是否是黄色的1,如果是,则把对面的黄色1标记成红色1,即变成通路,然后把蓝色0变成红色的,即也变成通路;如果不是,就把这个蓝色的0变成灰色的;

继续为红色通路集合寻找待定的蓝色0,然后随机选择一个蓝色0,然后看红色1隔着这个蓝色0对面的格子,是否是黄色的1,如果是,则把对面的黄色1标记成红色1,即变成通路,然后把蓝色0变成红色的,即也变成通路 ;如果不是,就把这个蓝色的0变成灰色的,以此类推,直到整个地图不再有蓝色的0为止。

A*算法自动寻路:

●常见的寻路算法有:广度优先算法、Djkstra (迪杰斯特拉)算法、Greed-Best-First-Search ( 最好优先贪婪算法)、A*算法等。

●在计算机科学中,A*算法作为Djkstra(迪杰斯特拉)算法的扩展,是一种静态路网中求解最短路径有效的直接搜索方法,因其高效性被广泛应用于寻路及图的遍历中,如星际争霸等游戏中就大量使用。

搜索区域(The SearchArea) :搜索区域被划分为简单的二维数组,数组每个元素对应一个结点(小方格,五角星,矩形等)。

开放列表(Open List):将寻路过程中待检测的结点存放于Open List中,而已检测过的结点则存放于Close List中。

路径排序(Path Sorting) :下一步怎么移动由以下公式确定:F(n)=G+ H。G代表的是从初始位置Start沿着已生成的路径到指定待检测结点移动开销。H表示待测结点到目标节点B的估计移动开销。

启发函数(Heuristics Function) : H为启发函数,可以看作是一种试探,由于在找到唯一路径前,不确定在前面会出现什么障碍物,因此用了一种计算H的算法,具体可以根据实际情况决定。为了简化问题,H采用的是传统的曼哈顿距离(Manhattan Distance),也就是横纵向走的距离之和。

工作原理——需要两个列表:
①记录下所有被考虑来寻找最短路径的方块(称为open列表)

②记录下不会再被考虑的方块(成为closed列表)
 

A*算法的智能高效体现在:

●在每一轮循环的时候不会探索所有的边界方块,而会选择当前“代价”最低的方块进行探索。

●“代价”可以分为两个部分,一部分是“当前路程代价”,即从起点出发一共走过多少个格子,当前代价就是几,另一部分是“预估代价”,它用来表示从当前方块到终点方块大概需要走多少步。

●总代价=当前代价+预估代价

●在探索方块的时候,优先挑选总代价最低的方块进行探索,以此方法搜索到的路径即为最短路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值