A*算法解决迷宫问题

迷宫问题:
一张地图上有若干障碍物,表示不能通过。给定起点和终点,要求找到一条从起点到终点的路径。

抽象:
把地图抽象为n*m的布尔矩阵。true表示可以通过,false表示不能通过。

算法思路:

  1. 维护两个列表,open和close。
  2. 从起点开始,先将起点加入open列表。算出其上下左右的位置离终点的距离,并让这些点都指向起点,放入open列表里。将起点放入close列表。
  3. 选择open列表中距离最短的点,对于其上下左右的位置,如果其既不在open列表中又不在close列表中,则计算其距离,并让这些点都指向选中的点,放入open列表中。刚才选中的点放入close列表中。
  4. 重复步骤3,直到终点被放入close列表中。
  5. 从终点开始,查找其指向的点,这样一路追溯到起点,则为一条可行路径。

距离的计算:公式 F = G + H

  1. F代表预测的通过这个点的路径总长度
  2. G代表从起点到这个点已经走过的长度。用该点指向的点的G加上1
  3. H为预测的从该点到终点所需距离。其中一种方法:用两个点之间纵坐标差值的绝对值和横坐标差值的绝对值相加而得(曼哈顿方法)
package a_star;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;


public class SimplePuzzle {
   

    class Position {
        int x;
        int y;
        Position lastPosition;
        int pastDistance = 0;
        int predictDistance;

        Position(int x, int y, Position lastPosition) {
            this.x = x;
            this.y = y;
            this.lastPosition = lastPosition;
            if(lastPosition != null)
                pastDistance = lastPosition.pastDistance + 1;
            predictDistance = Math.abs(endx - x) + Math.abs(endy - y);
        }
        int
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值