diff --git a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/DijkstraAlgorithm.java b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/DijkstraAlgorithm.java index 0f2f4a2..bbe10db 100644 --- a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/DijkstraAlgorithm.java +++ b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/DijkstraAlgorithm.java @@ -1,10 +1,14 @@ package org.insa.graphs.algorithm.shortestpath; -import org.insa.graphs.algorithm.AbstractInputData; +import java.util.ArrayList; +import java.util.List; + +import org.insa.graphs.algorithm.AbstractSolution; import org.insa.graphs.algorithm.utils.BinaryHeap; +import org.insa.graphs.algorithm.utils.ElementNotFoundException; +import org.insa.graphs.model.Arc; import org.insa.graphs.model.Graph; import org.insa.graphs.model.Node; -import org.insa.graphs.model.Arc; import org.insa.graphs.model.Path; @@ -42,53 +46,81 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm { // on indique à chaque label le sommet courant dont il s'occupe // le constructeur utilisé indique directement qu'on ne connait pas l'arc pere, que le sommet // n'est pas marqué et que le cout_courant est infini - tableau_label[nodes.getId()]= new Label(nodes); + tableau_label[nodes.getId()]= new Label(nodes); } // on met un coût nul pour le sommet origine tableau_label[origin.getId()].setcoutrealise(0); // on met le label du sommet origine dans le tas // il n'est pas nécessaire de réordonner le tas car cela est implémenté dans la méthode insert tas.insert(tableau_label[origin.getId()]); - + // variable qui nous permet de garder les arcs ajoutés pour les mettre dans le path plus tard + List arcsajout = new ArrayList(); // itération // condition d'arrêt 1: tas vide (soit on a réellement fini soit le point de destination ne fait pas parti de la même composante connexe) // condition d'arrêt 2: pour gagner du temps s'arrêter quand le sommet destination a été trouvé while ((!tas.isEmpty()) && (tableau_label[destination.getId()].getmarque()==false)){ // on extrait le label avec le coût le plus faible et on le supprime du tas - tas.findMin().setmarque(true); + // inutile : tas.findMin().setmarque(true); labelcourant = tas.deleteMin(); - // marque le sommet du label qu'on vient de récupérer - /* for (int i=0;i{ // vrai lorsque le coût min du sommet est connu par l'algorithme private boolean marque; // valeur courant du plus court chemin depuis l'origine vers le sommet - private int cout_realise; + private double cout_realise; // sommet père du sommet que l'on traite (dans le plus court chemin courant) // pas besoin car on peut l'avoir avec getOrigin sur arcperefils ( Node pere;) // arc correspondant au chemin (le plus court car on peut avoir plusieurs arcs) du père vers le sommet courant @@ -33,7 +33,7 @@ public class Label implements Comparable