【Java基础】A*算法在有向图中的应用

A*算法

A*(念做:A Star)算法是一种很常用的路径查找和图形遍历算法,有较好的性能和准确度。

可参考这篇文章,详细的介绍了它与其他路径查找算法的区别。
A* 算法的重点在于计算节点的优先级函数f(n)=g(n)+h(n)
f(n)是节点n的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。
g(n)是节点n距离起点的代价。
h(n)是节点n距离终点的预计代价,这也就是A* 算法的启发函数。
只要充分理解并掌握这一点,应用A* 算法也不在话下。

有向图实现

首先参考一下迷宫地图的A* 算法实现的详细代码,这套代码精练简洁,很适合初学者学习。

A* 算法能在网格中找到最短路径,同理也能应用在有向图上,寻找到代价最小的路径,话不多说,直接上代码。

定义有向图节点,每一个节点指向连接的节点作为该节点的子节点,每一个节点的位置以二维平面上的横纵坐标标识。

public class GNode {
    private double x; 
    private double y; 
    private String value;  //表示节点的值
    private double FValue = 0; //F值
    private double GValue = 0; //G值
    private double HValue = 0; //H值
    private List<GNode> CNode;//子节点
    private GNode PNode;   //父节点

    public GNode(int x, int y, String value) {
        super();
        this.x = x;
        this.y = y;
        this.value = value;
    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public double getFValue() {
        return FValue;
    }

    public void setFValue(double 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值