3.1 Classe Chemin
Dans un premier temps, avant d’´ecrire l’algorithme, on va s’int´eresser `a la classe
Chemin.
Un chemin est d´efini par une liste de Noeud mais rien ne dit que cette liste de
nœuds correspond `a un chemin valide. En effet, pour qu’un chemin qui contient les
nœuds cons´ecutifs n1et n2soit valide, il faut qu’il existe un arc allant de n1`a n2.
D´eclarer une m´ethode double distance(Reseau r) qui retourne la distance du
chemin si et seulement si le chemin est un chemin valide dans le r´eseau. Sinon, cette
m´ethode retourne -1 signifiant que le chemin n’est pas valide.
3.2 Classe NoeudAlgo
La classe NoeudAlgo a pour objectif de repr´esenter les nœuds avec leurs caract´eristiques
utiles `a l’algorithme de Dijkstra.
Cette classe poss`ede
– un attribut Noeud n correspondant au nœud d´ecrit
– un attribut double parcouru correspondant `a la distance d´ej`a parcourue `a partir
du d´epart pour atteindre ce nœud.
– un attribut Noeud parent qui correspond au nœud d’o`u l’on vient pour atteindre
ce nœud.
3.3 Classe Dijkstra
Faites h´eriter la classe Dijkstra de la classe Algorithme.
Cette classe poss`ede les ´el´ements suivants
– une liste ArrayList<NoeudAlgo> ouvert contenant l’ensemble des nœuds qui
reste `a d´evelopper
– une liste ArrayList<NoeudAlgo> ferme contenant l’ensemble des nœuds d´ej`a
d´evelopp´es (et que l’on n’a plus `a consid´erer dans la propagation)
Les m´ethodes `a d´efinir sont les suivantes
– une m´ethode void propagation() qui se charge de construire les listes ouvertes
et ferm´ees jusqu’`a atteindre le nœud d’arriv´ee. cette m´ethode utilisera les m´ethodes
suivantes
– une m´ethode NoeudAlgo choisir() qui retourne le nœud `a d´evelopper ce tour-
ci (celui dans la liste ouverte avec la distance la plus courte au d´epart - en cas
d’´egalit´e, peu importe le nœud retourn´e)
– une m´ethode void traiterNoeud(NoeudAlgo n) qui d´eveloppe le nœud net
fait les traitements adapt´es
– une m´ethode int indiceOuvert(Noeud n) et int indiceFerme(Noeud n) qui
retourne l’indice du nœud dans la liste ouverte ou ferm´ee (-1 si le nœud n’est
pas pr´esent)
Cpt JAVA - TD 4 - Assertions et algorithme de Dijkstra 5