From ad0e3a294ff39d5fd151696da9bc51502e04be99 Mon Sep 17 00:00:00 2001 From: Favary Pierre Date: Tue, 20 Apr 2021 17:32:50 +0200 Subject: [PATCH] Dijkstra beta0.2 --- .../shortestpath/DijkstraAlgorithm.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) 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 21cf642..b3aa37e 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,6 +1,7 @@ package org.insa.graphs.algorithm.shortestpath; import org.insa.graphs.algorithm.utils.BinaryHeap; +import org.insa.graphs.model.Arc; public class DijkstraAlgorithm extends ShortestPathAlgorithm { @@ -16,35 +17,37 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm { // TODO: //initialisation - BinaryHeap tas=new BinaryHeap(); + BinaryHeap tas=new BinaryHeap(); Label[] tablabel=new Label[data.getGraph().size()]; for (int i=0;itablabel[x].cout+(int)tablabel[y].pere.getMinimumTravelTime()) { - tablabel[y].cout=tablabel[x].cout+(int)tablabel[y].pere.getMinimumTravelTime(); - if (exist y in tas) { - tas.update(y); - }else { - tas.insert(y); + while (exnonmar){ + x=tas.deleteMin(); + tablabel[x].marque=true; + for (Arc arcy: data.getGraph().get(x).getSuccessors()) { + if (!tablabel[arcy.getDestination().getId()].marque) { + if (tablabel[arcy.getDestination().getId()].cout>tablabel[x].cout+(int)arcy.getMinimumTravelTime()) { + tablabel[arcy.getDestination().getId()].cout=tablabel[x].cout+(int)arcy.getMinimumTravelTime(); + try{ + tas.remove(arcy.getDestination().getId()); + } finally {//méthode fortement douteuse pour opérer update ou inssert selon si l'élément est déjà dans le tas ou pas + tas.insert(arcy.getDestination().getId()); } } } + + exnonmar=false;//pas ici; comment savoir quand le changer? + //penser à gérer le cas "aucun chemin n'existe" } - - exnonmar=false; } + //créer le chemin solution grâce au tas return solution; }