Java A*算法当前节点向外扩展,而不是单向扩展
黄色圆圈表示开始节点,红色圆圈表示目标节点。我不明白为什么我的当前节点向外扩展,而不是下面的图像,在那里节点只是直接进入目标 我目前正在遵循这个指南 我就是想不起该如何使用G成本选择更好的路径。它说,较低的G成本意味着更好的路径。但我应该将哪个节点与较低的G成本进行比较 如果它已经在开放列表中,使用G cost作为度量,检查该正方形的路径是否更好。较低的G成本意味着这是一条更好的路径。如果是,请将正方形的父级更改为当前正方形,并重新计算正方形的G和F分数 我想要的输出应该是这样的Java A*算法当前节点向外扩展,而不是单向扩展,java,algorithm,a-star,Java,Algorithm,A Star,黄色圆圈表示开始节点,红色圆圈表示目标节点。我不明白为什么我的当前节点向外扩展,而不是下面的图像,在那里节点只是直接进入目标 我目前正在遵循这个指南 我就是想不起该如何使用G成本选择更好的路径。它说,较低的G成本意味着更好的路径。但我应该将哪个节点与较低的G成本进行比较 如果它已经在开放列表中,使用G cost作为度量,检查该正方形的路径是否更好。较低的G成本意味着这是一条更好的路径。如果是,请将正方形的父级更改为当前正方形,并重新计算正方形的G和F分数 我想要的输出应该是这样的 我认为您在
我认为您在获取最低成本方面存在问题:
private Node getLowestFCost(List<Node> open) {
int lowestCost = 0;
int index = 0;
for (int i = 0; i < open.size(); i++) {
if (open.get(i).fCost <= lowestCost) {
lowestCost = open.get(i).fCost;
index = i;
}
}
return open.get(index);
}
私有节点getLowestFCost(列表打开){
int最低成本=0;
int指数=0;
对于(int i=0;i if(open.get(i).fCost我建议将此移到CodeReview SE。哇,你说得对!我花了几个星期才解决此问题:(.非常感谢!
private TiledMapTileLayer.Cell cell;
private Label label;
private Arrow arrow;
boolean diagonal;
Node parent;
int x;
int y;
int hCost;
int gCost;
int fCost;
public Node(TiledMapTileLayer.Cell cell, Arrow arrow, int x, int y) {
this.cell = cell;
this.x = x;
this.y = y;
this.arrow = arrow;
label = new Label("", Assets.getInstance().getMapAsset().getAssetSkin(), "default");
label.setPosition(this.getX(), this.getY());
}
TiledMapTileLayer.Cell getCell() {
return cell;
}
Label getLabel() {
return label;
}
public Arrow getArrow() {
return arrow;
}
private Node getLowestFCost(List<Node> open) {
int lowestCost = 0;
int index = 0;
for (int i = 0; i < open.size(); i++) {
if (open.get(i).fCost <= lowestCost) {
lowestCost = open.get(i).fCost;
index = i;
}
}
return open.get(index);
}