A* pas fini
This commit is contained in:
parent
39ea623f84
commit
c53d3eddce
5 changed files with 46 additions and 16 deletions
|
@ -1,9 +1,35 @@
|
|||
package org.insa.graphs.algorithm.shortestpath;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import org.insa.graphs.algorithm.AbstractSolution;
|
||||
import org.insa.graphs.algorithm.utils.BinaryHeap;
|
||||
import org.insa.graphs.model.Arc;
|
||||
import org.insa.graphs.model.Graph;
|
||||
import org.insa.graphs.model.Node;
|
||||
import org.insa.graphs.model.Path;
|
||||
import org.insa.graphs.model.Point;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import org.insa.graphs.algorithm.AbstractSolution;
|
||||
import org.insa.graphs.algorithm.utils.BinaryHeap;
|
||||
import org.insa.graphs.model.Arc;
|
||||
import org.insa.graphs.model.Graph;
|
||||
import org.insa.graphs.model.Node;
|
||||
import org.insa.graphs.model.Path;
|
||||
|
||||
public class AStarAlgorithm extends DijkstraAlgorithm {
|
||||
|
||||
public AStarAlgorithm(ShortestPathData data) {
|
||||
super(data);
|
||||
}
|
||||
|
||||
}
|
||||
@Override
|
||||
protected Label LabelOrigin(ShortestPathData data){
|
||||
return new LabelStar(data.getOrigin(), null, Double.MAX_VALUE, Point.distance(data.getOrigin().getPoint(),data.getDestination().getPoint()));
|
||||
}
|
||||
|
||||
}
|
|
@ -30,10 +30,10 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
|||
boolean notfini = true;
|
||||
|
||||
for (Node node : nodes) {
|
||||
labels.add(new Label(node));
|
||||
labels.add(new Label(node, null, Double.MAX_VALUE));
|
||||
}
|
||||
|
||||
Node origin = data.getOrigin();
|
||||
Node origin = LabelOrigin(data).getCurrentNode();
|
||||
notifyOriginProcessed(origin);
|
||||
labels.get(origin.getId()).setCost(0);
|
||||
tas.insert(labels.get(origin.getId()));
|
||||
|
@ -92,4 +92,12 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
|||
return solution;
|
||||
}
|
||||
|
||||
protected Label LabelOrigin(ShortestPathData data){
|
||||
return new Label(data.getOrigin(),null,Double.MAX_VALUE);
|
||||
}
|
||||
|
||||
protected Label createLabel(ShortestPathData data, Arc fatherArc, Label lastLabel){
|
||||
return new Label(data.getDestination(),fatherArc,lastLabel.getCost() + data.getCost(fatherArc));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,11 +9,11 @@
|
|||
private double cost;
|
||||
private Arc fatherArc;
|
||||
|
||||
public Label(Node currentNode)
|
||||
public Label(Node currentNode, Arc fatherArc, double Cost)
|
||||
{
|
||||
this.currentNode = currentNode;
|
||||
this.fatherArc = null;
|
||||
this.cost = Double.MAX_VALUE;
|
||||
this.fatherArc = fatherArc;
|
||||
this.cost = Cost;
|
||||
this.mark = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,19 +5,15 @@ import org.insa.graphs.model.*;
|
|||
public class LabelStar extends Label {
|
||||
private double CostEstime;
|
||||
|
||||
public LabelStar(Node node){
|
||||
super(node);
|
||||
this.CostEstime = Double.POSITIVE_INFINITY ;
|
||||
public LabelStar(Node node, Arc fatherArc, double Cost, double CostEstime){
|
||||
super(node, fatherArc, Cost);
|
||||
this.CostEstime = CostEstime;
|
||||
}
|
||||
|
||||
public double getCostEstime(){
|
||||
return CostEstime;
|
||||
}
|
||||
|
||||
public void setCostEstime(double CostEstime){
|
||||
this.CostEstime = CostEstime;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public double getTotalCost(){
|
||||
return super.getCost() + getCostEstime();
|
||||
|
|
|
@ -141,8 +141,8 @@ public class BinaryHeap<E extends Comparable<E>> implements PriorityQueue<E> {
|
|||
if (isEmpty() || index < 0 || index >= this.currentSize) {
|
||||
throw new ElementNotFoundException(x);
|
||||
}
|
||||
E lastItem = this.array.get(--this.currentSize);
|
||||
this.arraySet(index,lastItem);
|
||||
E last = this.array.get(--this.currentSize);
|
||||
this.arraySet(index,last);
|
||||
this.percolateUp(index);
|
||||
this.percolateDown(index);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue