迷宫寻路(A星寻路算法)

题目:假设我们有一个7×5大小的迷宫,如下图所示,绿色格子表示起点,红色的格子表示终点,中间的3个深灰色格子表示障碍物。请找到一条从起点到终点最短的路径。解题思路:       需要引入两个集合和一个公式,如下:openList:可到达的格子;closeList:已到达的格子;F=G+H;G:从起点到当前格子的步数;H:在不考虑障碍的情况下,从当前格子到达终点的距离;F:总距离,即从起点到当前格子,再从当前格子到达目
摘要由CSDN通过智能技术生成

题目:假设我们有一个7×5大小的迷宫,如下图所示,绿色格子表示起点,红色的格子表示终点,中间的3个深灰色格子表示障碍物。请找到一条从起点到终点最短的路径。
在这里插入图片描述


解题思路:
       需要引入两个集合和一个公式,如下:

  • openList:可到达的格子;
  • closeList:已到达的格子;
  • F=G+H;
  • G:从起点到当前格子的步数;
  • H:在不考虑障碍的情况下,从当前格子到达终点的距离;
  • F:总距离,即从起点到当前格子,再从当前格子到达目标格子的距离。

具体步骤:

  1. 把起点放入openList;
  2. 检查openList中是否有值,如果没有则无法到达终点,结束寻路;否则找出openList中F值最小的方格作为当前方格;
  3. 找出当前方格上下左右所有可达的格子,检查他们是否在openList或closeList中。如果不在,则将他们加入openList,计算出相应的G、H、F值,并把当前格子作为它们的“父节点”。
  4. 检查openList中是否含有终点格子,如果有就结束;没有则回到第二步。

代码实现:

public class AStarSearch {
   
    //迷宫地图
    public static final int[][] MAZE={
   
            {
   0,0,0,0,0,0,0},
            {
   0,0,0,1,0,0,0},
            {
   0,0,0,1,0,0,0},
            {
   0,0,0,1,0,0,0},
            {
   0,0,0,0,0,0,0}
    };

    //每一个格子节点
    static class Grid{
   
        public int x;
        public int y;
        public int g;
        public int f;
        public int h;
        public Grid parent;

        public Grid(int x,int y){
   
            this.x=x;
            this.y=y;
        }

        public void initGrid(Grid parent,Grid end){
   
            this
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值