diff --git a/TP/TP3.md b/TP/TP3.md new file mode 100644 index 0000000..dad218f --- /dev/null +++ b/TP/TP3.md @@ -0,0 +1,96 @@ +TP Graphes 3 : Parcours et Coloration +============ + +Le TP est prévu pour être fait en utilisant le codage des graphes à l'aide de matrices d'adjacence. +Pour plus de clarté, vous pouvez utiliser un nouveau fichier, en copiant les structures et fonctions nécessaires depuis les TPs précédants. + +- - - - - +Exercice 1 : Parcours en largeur +---------- + +Pour cet exercice, vous aurez besoin de file FIFO (First In, First Out). +Vous pouvez par exemple utiliser la classe [`LinkedList`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/LinkedList.html), instanciée pour les entiers avec `LinkedList`. +Pour utiliser une LinkedList en tant que file FIFO, vous pouvez utiliser les méthodes : +``` +public boolean isEmpty() : Returns true if this collection contains no elements. +Integer remove() : Retrieves and removes the head (first element) of this list. +boolean offer​(E e) : Adds the specified element as the tail (last element) of this list. +``` + +**Question :** + +Ecrire une fonction qui, étant donnés un graphe g et un sommet v de ce graphe, renvoie sous forme de file FIFO l'ensemble des voisins de v dans g : +``` +public LinkedList getVoisins(int i); +``` + +![Parcours en Largeur](parcoursLargeur.png) + +**Question :** + +Ecrire une fonction effectuant le parcours en largeur d'un graphe g à partir d'un sommet v. +On pourra se contenter d'afficher sur la sortie standard la numérotation ainsi que les distances obtenues, plutôt que de les renvoyer : +``` +public void parcoursLargeur(int v) +``` + +**Question :** + +Tester sur un graphe (au hasard celui des frontières). Cela correspond-t-il à une exécution manuelle de l'algorithme ? + + +- - - - - +Exercice 2 : Parcours en profondeur +---------- + +Pour implémenter le parcours en profondeur d'un graphe, nous aurons besoin d'une pile. +La classe `LinkedList` permet également de simuler des piles, avec les méthodes : +``` +public boolean isEmpty() : Returns true if this collection contains no elements. +Integer pop() : Pops an element from the stack represented by this list. +void push​(int i) : Pushes an element onto the stack represented by this list. +``` + + +**Question :** + +Ecrire une fonction effectuant le parcours en profondeur d'un graphe g à partir d'un sommet v. +On pourra se contenter d'afficher sur la sortie standard la numérotation de premier passage plutôt que de les renvoyer : +``` +public void parcoursProfondeur(int i); +``` + +![Parcours en Profondeur](parcoursProfondeur.png) + +**Question :** + +Tester sur un graphe (au hasard celui des frontières). Cela correspond-t-il à une exécution manuelle de l'algorithme ? + +**Question :** + +Adaptez votre code pour également calculer, puis afficher, la numérotation de dernier passage. + +- - - - - +Exercice 3 : Algorithme de Welsh-Powell +---------- + +On va implémenter l'algorithme de Welsh-Powell de coloriage glouton des graphes. +Les premières questions visent à donner des fonctions aidant à l'implémentation de l'algorithme. A vous de les suivre ou non. + +**Question : Liste des sommets selon leur degré** + +-Créer une fonction `private int[] tableauDegre();` renvoyant un tableau où la case i contient le degré du sommet i. + +-Créer une fonction `private int indiceMax(int[] tab);` renvoyant l'indice de la plus grande valeur du tableau tab. + +-En utilisant les deux premières fonctions, créer une fonction `private LinkedList listeDegre()` renvoyant une liste des sommets classés selon leur degré. + +**Question** + +![Algorithme de Welsh-Powell](WelshPowell.png) + +**Question** + +Enfin, implémentez l'algorithme de Welsh-Powell. + +Indice : Vous aurez besoin de la liste des sommets triés selon leur degré. On peut retirer un élément i donné de la liste l avec `l.remove((Integer) i)`. \ No newline at end of file diff --git a/TP/WelshPowell.png b/TP/WelshPowell.png new file mode 100644 index 0000000..333a2c1 Binary files /dev/null and b/TP/WelshPowell.png differ diff --git a/TP/parcoursLargeur.png b/TP/parcoursLargeur.png new file mode 100644 index 0000000..01dd760 Binary files /dev/null and b/TP/parcoursLargeur.png differ diff --git a/TP/parcoursProfondeur.png b/TP/parcoursProfondeur.png new file mode 100644 index 0000000..5ff2aee Binary files /dev/null and b/TP/parcoursProfondeur.png differ diff --git a/td/TD3.pdf b/td/TD3.pdf new file mode 100644 index 0000000..35e026d Binary files /dev/null and b/td/TD3.pdf differ