This commit is contained in:
Luc Dartois 2023-03-14 16:28:32 +01:00
commit 6b1318634f

View File

@ -47,6 +47,7 @@ int empty(fifo *fi){
On rappelle que pour une variable `fifo *fi`, on empile 3 en faisant `enqueue(&fi,3)` et on défile (et on stocke dans une variable x) en faisant `x=dequeue(&fi)`. On rappelle que pour une variable `fifo *fi`, on empile 3 en faisant `enqueue(&fi,3)` et on défile (et on stocke dans une variable x) en faisant `x=dequeue(&fi)`.
**Question :** **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 : 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 :
``` ```
fifo* fileVoisins(graphe g,int v); fifo* fileVoisins(graphe g,int v);
@ -54,6 +55,7 @@ fifo* fileVoisins(graphe g,int v);
**Question :** **Question :**
Ecrire une fonction effectuant le parcours en largeur d'un graphe g à partir d'un sommet v. 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 : On pourra se contenter d'afficher sur la sortie standard la numérotation ainsi que les distances obtenues, plutôt que de les renvoyer :
``` ```
@ -61,6 +63,7 @@ void parcoursLargeur(graphe g,int v);
``` ```
**Question :** **Question :**
Tester sur un graphe (au hasard celui des frontières). Cela correspond-t-il à une exécution manuelle de l'algorithme ? Tester sur un graphe (au hasard celui des frontières). Cela correspond-t-il à une exécution manuelle de l'algorithme ?
@ -106,6 +109,7 @@ On rappelle que pour une variable `pile *fi`, on push 3 en faisant `push(&fi,3)`
La primitive `x=first(fi)` permet de récupérer le sommet de la pile sans dépiler. La primitive `x=first(fi)` permet de récupérer le sommet de la pile sans dépiler.
**Question :** **Question :**
Ecrire une fonction effectuant le parcours en profondeur d'un graphe g à partir d'un sommet v. 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 : On pourra se contenter d'afficher sur la sortie standard la numérotation de premier passage plutôt que de les renvoyer :
``` ```
@ -113,9 +117,11 @@ void parcoursProfondeur(graphe g,int v);
``` ```
**Question :** **Question :**
Tester sur un graphe (au hasard celui des frontières). Cela correspond-t-il à une exécution manuelle de l'algorithme ? Tester sur un graphe (au hasard celui des frontières). Cela correspond-t-il à une exécution manuelle de l'algorithme ?
**Question :** **Question :**
Adaptez votre code pour également calculer, puis afficher, la numérotation de dernier passage. Adaptez votre code pour également calculer, puis afficher, la numérotation de dernier passage.
- - - - - - - - - -
@ -126,15 +132,20 @@ 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. 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é** **Question : Liste des sommets selon leur degré**
-Créer une fonction `int* tableauDegre(graphe g);` renvoyant un tableau où la case i contient le degré du sommet i. -Créer une fonction `int* tableauDegre(graphe g);` renvoyant un tableau où la case i contient le degré du sommet i.
-Créer une fonction `int indiceMax(int *tab,int taille);` renvoyant l'indice de la plus grande valeur du tableau tab de longueur taille. -Créer une fonction `int indiceMax(int *tab,int taille);` renvoyant l'indice de la plus grande valeur du tableau tab de longueur taille.
-En utilisant les deux premières fonctions, créer une fonction `fifo* listeDegre(graphe g);` renvoyant une liste des sommets classés selon leur degré. -En utilisant les deux premières fonctions, créer une fonction `fifo* listeDegre(graphe g);` renvoyant une liste des sommets classés selon leur degré.
**Question** **Question**
Pour simplifier le code de Welsh-Powell, écrire une fonction Pour simplifier le code de Welsh-Powell, écrire une fonction
`int voisinCouleur(graphe g,int v,int c,int *color)` renvoyant 1 si le sommet v a un voisin de la couleur c dans le tableau color, et 0 sinon. `int voisinCouleur(graphe g,int v,int c,int *color)` renvoyant 1 si le sommet v a un voisin de la couleur c dans le tableau color, et 0 sinon.
**Question** **Question**
Enfin, implémentez l'algorithme de Welsh-Powell. Enfin, implémentez l'algorithme de Welsh-Powell.
Indice : Vous aurez besoin de la liste des sommets triés selon leur degré, mais également d'un lecteur sur cette liste, i.e. un pointeur vers le début de la liste pouvant la parcourir autrement que par des dequeues. Indice : Vous aurez besoin de la liste des sommets triés selon leur degré, mais également d'un lecteur sur cette liste, i.e. un pointeur vers le début de la liste pouvant la parcourir autrement que par des dequeues.