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