diff --git a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/Label.java b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/Label.java new file mode 100644 index 0000000..e69de29 diff --git a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/utils/BinaryHeap.java b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/utils/BinaryHeap.java index a5073cd..c2aada8 100644 --- a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/utils/BinaryHeap.java +++ b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/utils/BinaryHeap.java @@ -134,7 +134,16 @@ public class BinaryHeap> implements PriorityQueue { @Override public void remove(E x) throws ElementNotFoundException { - // TODO: + int index =this.array.indexOf(x); + if (index==-1||index>this.currentSize-1) { + throw new ElementNotFoundException(x); + + } + E lastItem=this.array.get(--this.currentSize); + this.arraySet(index, lastItem); + this.percolateUp(index); + this.percolateDown(index); + } @Override diff --git a/be-graphes-model/src/main/java/org/insa/graphs/model/Path.java b/be-graphes-model/src/main/java/org/insa/graphs/model/Path.java index b9accf1..f4d345d 100644 --- a/be-graphes-model/src/main/java/org/insa/graphs/model/Path.java +++ b/be-graphes-model/src/main/java/org/insa/graphs/model/Path.java @@ -29,23 +29,31 @@ public class Path { */ public static Path createFastestPathFromNodes(Graph graph, List nodes) throws IllegalArgumentException { - List arcs = new ArrayList(); - if (nodes.size() <= 2){ - throw new IllegalArgumentException(); - }else{ - for (int j = 0; j < nodes.size(); j++){ - Node premier = nodes.get(j); - List suc = premier.getSuccessors(); - Arc elu = suc.get(0); - for (int i=0; i < suc.size(); i++){ + if (nodes.isEmpty()){ + return new Path(graph); + } + if (nodes.size()==1){ + return new Path(graph,nodes.get(0)); + } + List arcs = new ArrayList<>(); + for (int i=0;i nodes) throws IllegalArgumentException { - List arcs = new ArrayList(); - if (nodes.size() <= 2){ - throw new IllegalArgumentException(); - }else{ - for (int j = 0; j < nodes.size(); j++){ - Node premier = nodes.get(j); - List suc = premier.getSuccessors(); - Arc elu = suc.get(0); - for (int i=0; i < suc.size(); i++){ + if (nodes.isEmpty()){ + return new Path(graph); + } + if (nodes.size()==1){ + return new Path(graph,nodes.get(0)); + } + List arcs = new ArrayList<>(); + for (int i=0;i firstSucs = origin.getSuccessors(); - List destFirstArc = new ArrayList<>() ; - for( Arc fSuc : firstSucs){ - destFirstArc.add(fSuc.getDestination()) ; - - } - for (Node secondNode : destFirstArc){ - List secondSucs = secondNode.getSuccessors(); - for (Arc sSuc : secondSucs){ - if ( sSuc.getDestination() == origin){ - return true ; - } - } - - } - - return false; - + public boolean isValid() { + // Cas 1 : chemin vide + if (this.isEmpty()) { + return true; } + // Cas 2 : nœud unique, pas d'arcs + if (this.arcs.isEmpty()) { + return true; + } + // Cas 3 : le premier arc doit partir de l'origine + if (!this.arcs.get(0).getOrigin().equals(this.origin)) { + return false; + } + // Cas 4 : chaque arc doit enchaîner sur le suivant + for (int i = 0; i < this.arcs.size() - 1; i++) { + if (!this.arcs.get(i).getDestination().equals(this.arcs.get(i + 1).getOrigin())) { + return false; + } + } + return true; +} /** * Compute the length of this path (in meters). diff --git a/be-graphes-model/src/test/java/org/insa/graphes/model/PathTest.java b/be-graphes-model/src/test/java/org/insa/graphes/model/PathTest.java index 8d10b74..0dbf42c 100644 --- a/be-graphes-model/src/test/java/org/insa/graphes/model/PathTest.java +++ b/be-graphes-model/src/test/java/org/insa/graphes/model/PathTest.java @@ -179,6 +179,7 @@ public class PathTest { for (int i = 0; i < expected.length; ++i) { assertEquals(expected[i], path.getArcs().get(i)); } + // Not so simple construction path = Path.createFastestPathFromNodes(graph,