Vous êtes sur la page 1sur 3

Programmation Oriente Objet

TP collections Graphes orients extensibles


Ensimag 2me

Graphe orient extensible

Ce TP porte sur la reprsentation de graphes orients tiquets et extensibles. Pour rappel,


un graphe orient est une structure mathmatique constitue dun ensemble N de sommets (ou
nuds), accompagn dun ensemble de couples de N N : les arcs. Nous supposons que les
sommets sont tiquets par des chanes de caractres, cest--dire qu tout sommet est associ
une chane de caractres (String) unique. De plus, on suppose quil ne peut pas y avoir plusieurs
sommets de mme tiquette.
Par extensible , on entend des graphes auxquels on peut ajouter dynamiquement des
sommets et des arcs. Pour les arcs, vous de dfinir si vous autorisez ou non davoir plusieurs
arcs entre deux sommets (multigraphe ou non).
On sintresse ici :
la structure dun graphe ;
savoir lafficher ;
dterminer si un chemin existe entre deux sommets.
On introduit donc linterface Graphe suivante :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

public interface Graphe {


/* *
* Ajoute un nouveau sommet d tiquette label .
* Si un sommet de m me tiquette existe d j , cette m thode ne fait
rien .
*/
public void ajouteSommet ( String label ) ;
/* *
* Ajoute un nouvel arc entre deux sommets .
* Si les sommets n existent pas encore , ils sont ajout s au graphe .
* Si un arc existe d j entre ces deux sommets , on ne fait rien .
*/
public void ajouteArc ( String labelDepart , String labelArrivee ) ;

/* *
* Retourne une cha ne contenant la liste des sommets , puis celle
des arcs .
*/
@Override
public String toString () ;
/* *
* Cherche l existence d un chemin entre deux sommets du graphe .
* @return true si un chemin existe
*/

public boolean existeChemin ( String labelDepart , String labelArrivee )

27

;
28

Une classe TestGraphe.java est fournie pour construire et tester le (multi-)graphe de la


figure 1 partir de la spcification ci-dessus.
3

Figure 1 Exemple de graphe orient construit dans TestGraphe.java. En gris les artes
ajoutes si lon considre un modle de multigraphe.

Codage par successeurs

Il existe diffrentes faons de reprsenter des graphes en mmoire. Les graphes extensibles
reposent toujours sur des codages par successeurs, et non des tables dadjacences statiques. Ceci
signifie que le codage du graphe en mmoire va ressembler un peu au graphe lui-mme : un
sommet donn contient des liens (rfrences) vers chacun de ses sommets successeurs. Un tel
codage est avantageux pour implmenter des algorithmes de parcours vers lavant (recherche de
chemin, par exemple).
Cette reprsentation repose ici sur deux les deux classes suivantes :
un Sommet est dfini par son tiquette et ses successeurs ;
un GrapheSuccesseurs contient simplement lensemble des sommets du graphe. Cette
classe doit raliser linterface Graphe ci-dessus, et donc dfinir toutes ses mthodes.
Question 1 Dfinir les attributs des classes et crire les mthodes ajouteSommet et ajouteArc.
Bien entendu, vous devez ici utiliser les collections Java adquates (choix justifier !).
Question 2 Redfinir la mthode toString() de la classe Graphe pour afficher lensemble des
sommets du graphe, puis lensemble des arcs.
Question 3 Redfinir la mthode existeChemin qui cherche sil existe un chemin entre deux
sommets.
Cette recherche ncessite de rsoudre le problme de marquage des sommets, pour viter de
tourner en rond en cas de cycle... Pour savoir si un sommet a dj t trait, plusieurs approches
sont possibles :
garder une information au niveau de chaque sommet (qui doit tre initialise puis mise
jour)
maintenir une collection contenant les sommets dj parcourus.
A vous de tester une ou ces deux mthodes ; laquelle vous parat la plus intressante ?
2

Autre reprsentation

Une autre reprsentation possible est de dcrire entirement la structure au niveau du graphe
lui-mme. Celui-ci contient alors une association (cl, valeur) entre chaque sommet (la cl) et
lensemble de ses successeurs (la valeur).
Question 4 Implanter cette deuxime reprsentation dans une nouvelle classe ralisant elle
aussi linterface Graphe. Ainsi, vous pourrez la tester avec le mme programme de test que
prcdemment.
Quels sont les avantages/inconvnients par rapport la premire solution ?

Vous aimerez peut-être aussi