From a90cae2805d42f2afc958c6c6b4ca98100946b7e Mon Sep 17 00:00:00 2001 From: Nabzzz Date: Fri, 24 Apr 2020 18:20:50 +0200 Subject: [PATCH] =?UTF-8?q?Etape=204=20termin=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shortestpath/DijkstraAlgorithm.java | 105 ++++++++++++++++-- .../shortestpath/DijkstraAlgorithm.class | Bin 4126 -> 6655 bytes .../graphs/algorithm/shortestpath/Label.class | Bin 1292 -> 1736 bytes 3 files changed, 95 insertions(+), 10 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 2c5f944..db622ca 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 @@ -4,8 +4,10 @@ package org.insa.graphs.algorithm.shortestpath; import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.ArrayList; +import org.insa.graphs.algorithm.AbstractInputData.Mode; import org.insa.graphs.algorithm.AbstractSolution.Status; import org.insa.graphs.algorithm.utils.BinaryHeap; import org.insa.graphs.algorithm.utils.ElementNotFoundException; @@ -34,42 +36,65 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm { } tabLabel[data.getOrigin().getId()].setCout(0); tas.insert(tabLabel[data.getOrigin().getId()]); + this.notifyOriginProcessed(data.getOrigin()); //int nbMarque=0; + int iterations=0; while(!tabLabel[data.getDestination().getId()].isMarque()) { - Node X=tas.findMin().getSommetCourant(); + iterations++; + Node X; + try + { + X=tas.findMin().getSommetCourant(); + } + catch(org.insa.graphs.algorithm.utils.EmptyPriorityQueueException e) + { + System.out.println("Tas vide \n"); + break; + } tabLabel[X.getId()].setMarque(true); + this.notifyNodeMarked(X); + System.out.println("Coût: "+tas.findMin().getCout()+"\n"); //nbMarque++; try { tas.remove(tabLabel[X.getId()]); } catch(ElementNotFoundException e) {System.out.println("The element was not found in the binary heap \n");} + int nbSuccesseurs=0; for(Arc a: X.getSuccessors()) { + nbSuccesseurs++; Node Y=a.getDestination(); if(!tabLabel[Y.getId()].isMarque()) { //double cout_avant=tabLabel[Y.getId()].getCout(); - if(((tabLabel[X.getId()].getCout()+a.getLength()) arcs = new ArrayList<>(); Arc arc = tabLabel[data.getDestination().getId()].getPere(); while (arc != null) { arcs.add(arc); arc = tabLabel[arc.getOrigin().getId()].getPere(); } - + System.out.println("Nombre d'arcs: "+arcs.size() + "\n"); + System.out.println("Nombre d'itérations: "+iterations + "\n"); // Reverse the path... Collections.reverse(arcs); - + + //Vérification grâce à Path.createShortestPathFromNodes + Path p= new Path(graph,arcs); + //List noeuds=new ArrayList(); + float cout_total=0; + for(Arc a: arcs) + { + cout_total += a.getLength(); + } + if(p.getLength()==cout_total) + { + System.out.println("La longueur du plus court chemin est la même que celle calculée grâce à Dijkstra \n"); + } + else + { + + System.out.println("ERREUR: La longueur du plus court chemin n'est la même que celle calculée grâce à Dijkstra \n"); + System.out.println("Cout Dijktra="+cout_total); + System.out.println("Cout Dijktra="+p.getLength()); + } + /*noeuds.add(data.getDestination()); + + if(data.getMode()==Mode.LENGTH) + { + Path shortestpath=Path.createShortestPathFromNodes(graph, noeuds); + + if(shortestpath.getLength()==p.getLength()) + { + System.out.println("La longueur du plus court chemin est la même que celle calculée grâce à Dijkstra \n"); + } + else + { + System.out.println("ERREUR: La longueur du plus court chemin n'est la même que celle calculée grâce à Dijkstra \n"); + } + } + + else + { + Path fastestpath=Path.createFastestPathFromNodes(graph, noeuds); + + if(fastestpath.getMinimumTravelTime()==p.getMinimumTravelTime()) + { + System.out.println("La longueur du plus court chemin est la même que celle calculée grâce à Dijkstra \n"); + } + else + { + System.out.println("ERREUR: La longueur du plus court chemin n'est la même que celle calculée grâce à Dijkstra \n"); + } + }*/ + + //Vérification de la validation du path + if(p.isValid()) + { + System.out.println("Félicitation votre path est valide \n"); + } + else + { + System.out.println("Erreur! votre path est invalide \n"); + } // Create the final solution. solution = new ShortestPathSolution(data, Status.OPTIMAL, new Path(graph, arcs)); } diff --git a/be-graphes-algos/target/classes/org/insa/graphs/algorithm/shortestpath/DijkstraAlgorithm.class b/be-graphes-algos/target/classes/org/insa/graphs/algorithm/shortestpath/DijkstraAlgorithm.class index 992c3a6d2ce20dd1d383a28dab4a361c67ba88d5..48333f332c8d39af83a9bda9f3f78ee1482f2309 100644 GIT binary patch literal 6655 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 EAB5pk`v3p{ delta 1427 zcmZvb?^9G|6vsc$!tT9$_kz1i1Xq*@BLQJFWts#k3~bQYQBy&TQp620gxDXbMJ}3} zX=wVGnVO+l*e^}3MP(}AIa9sq53rfuG`;I})uxSAhkW@(^I2{45><+v z?r36pva2f^kN3yo1~2RFMsccxH8yK$R^&>&DH>1o^mQhB`ui+qvd*T9CWYA(k95Wc zl2O+gwRx3pg(3LH{$xUtRbJ6#(Ls;RMqX3+CDIb@>rQOA9edu*+GNv5zhuRuiKWq4 zR8d^s(jU`*8BVa(qJT9nDrOTWq4WGzYEU=$8~j^%!(gl834JP5sWUl-*XB)z^iTeU zW|D0-UQ*h&V&w+g6?q#w2Rmmc6Ft4N7sO(nTU&bK35#LM+-0ZDE_Ul*tdcbyh^BYh zXRue1e=n)AzqdEq<#r#pd5;m18;cG`V{wt2SKe|D=n~gewEEe?0h{+366BJlD;7l- zv=|)HnJh=23-|&DIqWL@Kru%zH4F8q$ER-u9ttG+(Dffx?9)@MP1?vUzH}zHQ016? z>m~=SP^)xDFrse+9ko~ots;HP6V#=lupZ40=w+d152y9

qN0^lza$4_EXbp6UAU zoS?1?H+aKBpQnezZfyi>mr-Sc`GtT z>jcB?8Oidy3Qeq>m7vaz=U_P&4>UaE9nV&gbGYMSM4MZ}3YCYxzQa0TH;EFZl{nWY+QZ z?dUfm<6$W~S>c>WnnayX35h$@y;vC;fZsqF6c{88rpu|+;DQvafoT~Y$9zCoK}Kd8 zcu>e-{$%z|Vi^&6e||L=grMwSrWy+fEZv6kVq+Q>nvMK;=?EQQIjnUhoQ5xx~bzUJ?v3ydCPK9c?>xI`!4h&=@~~ zL`?(}AB@j_jbC6~=gbJTr8Ma|bM~3N_S$Q&_Sc{9KL9LYJ&BmWyyur}x7Lt$$(QwV z!n1bBwm_ojHJKzf_*i#* zMkl)Dulhx%8!K+j4e|ohnJ(|?I@vAat+QeZahx(SfDwUsCcD)OfiV+FoG{-0rbzsx z7#cS*fk}a6Lw7<(iOfcJOI@W+Ok+l%mskIoCo>$o>4-$we=h1U9CA8itk={9o$cqCQ~K4E>su$9}xs5OGq`#5XG_c3LOeawE*$rree!{FM_B7+1U;yR2`oMLgC=(Kc^T0xc)kw~ffmkwo|-?I1F-hsAaxb0l)13lTLGMdUKB z96@BXU6IU@L}=B6~d-p8um*Zu;Ovo)ar literal 1292 zcmaKr%Wl&^6o&svQ>P8?H7%6hftEV%#gG;@ph~C}t5A@NvgmFSti)9k2isxG3n2j# zEfNbJfT!UJ5dRs6QqqPjJTqtJ{O3ED{P^|lJAger&LN|)6-IS0Xvf;CN4nF9J>9H_ zQIIrRUfc+y#E+AXP8wcWSN&!VS%t|{{Z4yL-L88ttEYY~Q5cKER?ANg!fvG7JTI2} zRa@a3zv&(E`$Szt&Qt2XZ7ZtC~S;4cs25`Mv&CheIb zUSB0HXMmMsnGZ#6*TyLF3i)G>M$La7NUnJ^OFJ?~tQ;S+0a;|EA>3sozFFyMR`PKj z;ma|M^E<&)jb0h93+`7;x|?SxxHFhN$1Qj0oJMtymCwfc9>4QOc$`5di8ICTG-gqt zeFkg1znMy59rt;ns6pXGVgpVupvP75ZrJ^T;wNr05NXR8=ZuV z))Lad&IYEOrNE NAtNPO?3sv