Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java A*算法当前节点向外扩展,而不是单向扩展_Java_Algorithm_A Star - Fatal编程技术网

Java A*算法当前节点向外扩展,而不是单向扩展

Java A*算法当前节点向外扩展,而不是单向扩展,java,algorithm,a-star,Java,Algorithm,A Star,黄色圆圈表示开始节点,红色圆圈表示目标节点。我不明白为什么我的当前节点向外扩展,而不是下面的图像,在那里节点只是直接进入目标 我目前正在遵循这个指南 我就是想不起该如何使用G成本选择更好的路径。它说,较低的G成本意味着更好的路径。但我应该将哪个节点与较低的G成本进行比较 如果它已经在开放列表中,使用G cost作为度量,检查该正方形的路径是否更好。较低的G成本意味着这是一条更好的路径。如果是,请将正方形的父级更改为当前正方形,并重新计算正方形的G和F分数 我想要的输出应该是这样的 我认为您在

黄色圆圈表示开始节点,红色圆圈表示目标节点。我不明白为什么我的当前节点向外扩展,而不是下面的图像,在那里节点只是直接进入目标

我目前正在遵循这个指南

我就是想不起该如何使用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;iif(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);
}