美文网首页
算法:A*寻路算法

算法:A*寻路算法

作者: Caolongs | 来源:发表于2017-12-19 10:14 被阅读21次
    A*Search,是一种寻找有效路径的算法。

    [OpenList][CloseList][F = G + H]
    OpenList和CloseList都是存储格子的集合,其中OpenList存储可到达的格子,CloseList存储已到达的格子。
    公式F=G+H,是对格子价值的评估,G代表中起点走到当前点的成本,也就是走了多少步。H代表从当前格走到目标格的距离,也就是不考虑障碍的情况下,离目标还有多远。F则是对G和H的综合评估。显然我们应该尽量选择步数更少,离目标更近的格子,所以F的值越小越好。

    A*寻路核心逻辑的伪代码

    public Node aStarSearch(Node start, Node end) {
        // 把起点加入 open list  
        openList.add(start);
        //主循环,每一轮检查一个当前方格节点
        while (openList.size() > 0) {
            // 在OpenList中查找 F值最小的节点作为当前方格节点
            Node current = findMinNode();
            // 当前方格节点从open list中移除
            openList.remove(current);
            // 当前方格节点进入 close list
            closeList.add(current);
            // 找到所有邻近节点
            List<Node> neighbors = findNeighbors(current);
            for (Node node : neighbors) {
                if (!openList.contains(node)) {
                    //邻近节点不在OpenList中,标记父亲、G、H、F,并放入OpenList
                    markAndInvolve(current, end, node);
                }
            }
            //如果终点在OpenList中,直接返回终点格子
            if (find(openList, end) != null) {
                return find(openList, end);
            }
        }
        //OpenList用尽,仍然找不到终点,说明终点不可到达,返回空
        return null;
    }
    

    相关文章

      网友评论

          本文标题:算法:A*寻路算法

          本文链接:https://www.haomeiwen.com/subject/qicbwxtx.html