INF 441 - TD 3
Files d'entiers et parcours en largeur de graphes

Votre opinion sur le cours de ce matin : Votre opinion sur le TD de la semaine dernière :

L'objectif de ce TD est d'implémenter de plusieurs façon différentes (mais toujours en Java) des files d'entiers, autrement dit des classes qui offrent les méthodes décrites ci-dessous.

Ces implémentations seront utilisées pour réaliser le parcours en largeur d'un graphe (c'est une application classique).

Les classes et interfaces du TD seront rangées dans deux paquets intfifo et applications, exceptée la classe Main avec laquelle on effectuera les tests (à mettre dans le default package de Java).

1. Interface

But : créer des paquets, des interfaces et quelques classes très simples à l'aide d'Eclipse en précisant les risques de levée d'exception.

Déposer le fichier FIFO.java :

Solution : FIFO

2. Implémentation de l'interface FIFO à base de tableaux d'entiers

But : écrire une classe ArrayQueue qui implémente l'interface FIFO à l'aide d'un tableau d'entiers de type int [].

Quelques indications et une contrainte :

Déposer le fichier ArrayQueue.java :

Solution : ArrayQueue

3. Application : parcours en largeur des graphes (Breadth First Search)

Dans cette section, un graphe désigne un graphe orienté dont les sommets sont des entiers avec au plus un arc d'un sommet vers un autre. Si α et β sont deux sommets, il peut néanmoins y avoir un arc α→β et un arc β→α. Un graphe est donc caractérisé par une application (i.e. interface Map de Java) qui associe à chaque sommet l'ensemble (i.e. interface Set de Java) de ses successeurs.

But : implémenter les graphes en utilisant des classes (paramétrées) fournies par Java, puis exploiter un objet qui satisfait l'interface FIFO pour implémenter le parcours de graphe en largeur depuis un sommet donné.

Déposer les fichiers Graph.java, MyGraph.java, et BFS.java:

Solution : Graph / MyGraph / BFS

4. Implémentation de l'interface FIFO à base de listes chaînées

But : écrire une classe LinkedQueue qui implémente l'interface FIFO à l'aide de listes chaînées.

L'utilisation de tableaux dans ArrayQueue contraint le programmeur à fixer une taille maximale initialement. Nous allons lever cette contrainte en utilisant des listes chaînées.

Une file est une liste chaînée dont la tête est l'élément le plus ancien (donc celui qui sera supprimé au prochain appel à la méthode get). On maintient aussi un pointeur sur la dernière cellule de la liste chaînée, de manière à pouvoir ajouter de nouveaux éléments à la fin de la liste.

Déposer les fichiers ListCell.java et LinkedQueue.java :

Solution : ListCell et LinkedQueue