项目三 基于A*算法的迷宫设计

本文介绍了使用A*算法解决迷宫寻路问题的实验。实验中,迷宫采用深度优先搜索算法随机生成。A*算法通过启发式函数评估每个步骤,以找到从起点到终点的最短路径。实验总结强调了理论知识与实践结合的重要性,以及作者在项目实施中认识到的自身不足。
摘要由CSDN通过智能技术生成

1.实验要求

要求:

1、迷宫随机生成

2、玩家走迷宫,留下足迹;

3、系统用A*算法寻路,输出路径

解决问题:

1、如何显示迷宫的图形界面;

2、怎样移动游戏中走迷宫的“玩家”;

3、如何生成随机的迷宫;

4、用A*算法求解迷宫;


2.实验原理

2.1随机生成迷宫

使用了深度优先搜索算法来生成迷宫。 这段代码的目的是在一个二维数组MAP中生成一个迷宫。通过遍历迷宫的格子,检查isFind二维数组中对应位置的值是否为0,来判断是否已经访问过该格子。然后,代码随机选择一个方向direction,并根据方向和当前位置curP的值来更新迷宫MAP和isFind数组。 如果方向为0且当前位置的前两个位置为0,则将上一个位置打破,即将前一个位置插入到MAP中。 当所有格子都被访问过后,退出循环。

2.2  A*算法的原理

A*算法是一种启发式搜索算法,常用于解决迷宫寻路问题。在迷宫寻路问题中,我们有一个二维网格,其中某些格子是墙,不能通过,而其他格子是可以走的。我们的目标是从起点走到终点,尽可能快。

A*算法使用一个启发式函数来评估每个可能的步骤,该函数通常是对到达目标节点的预估距离。然后,算法使用一个优先级队列(例如,通过F值排序)来迭代并选择最有希望的步骤进行搜索。

以下是A*算法的步骤:

1. 定义每个节点的F值为G值(从起点到当前节点的实际代价)和H值(当前节点到目标的预估代价,也称为启发式代价)之和。
2. 将起点添加到优先队列中,其G值为0,H值为从起点到起点的预估代价(通常为0)。
3. 从优先队列中取出F值最小的节点。
4. 对该节点的所有邻居进行以下操作:
    * 计算新的G值(当前节点的G值加上到邻居的代价)。
    * 计算新的H值(预估从当前节点到目标的代价)。
    * 计算新的F值(G值和H值之和)。
    * 如果邻居不在已探索的节点中,将其添加到优先队列中。
5. 如果终点被添加到优先队列中,并且其G值小于当前最优路径的G值,则更新最优路径。
6. 如果优先队列为空,则问题无解。
7. 重复步骤3-6直到找到解或优先队列为空。


2.2实现过程

主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底...,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。

树是图的一种特例(连通无环的图就是树),接下来我们来看看树用深度优先遍历该怎么遍历。

1、我们从根节点 1 开始遍历,它相邻的节点有 2,3,4,先遍历节点 2,再遍历 2 的子节点 5,然后再遍历 5 的子节点 9。

2、上图中一条路已经走到底了(9是叶子节点,再无可遍历的节点),此时就从 9 回退到上一个节点 5,看下节点 5 是否还有除 9 以外的节点,没有继续回退到 2,2 也没有除 5 以外的节点,回退到 1,1 有除 2 以外的节点 3,所以从节点 3 开始进行深度优先遍历,如下:

3、同理从 10 开始往上回溯到 6, 6 没有除 10 以外的子节点,再往上回溯,发现 3 有除 6 以外的子点 7,所以此时会遍历 7。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值