diff --git a/TP/TP3.md b/TP/TP3.md deleted file mode 100644 index dad218f..0000000 --- a/TP/TP3.md +++ /dev/null @@ -1,96 +0,0 @@ -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<Integer>`. -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<Integer> getVoisins(int i); -``` - - - -**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); -``` - - - -**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<Integer> listeDegre()` renvoyant une liste des sommets classés selon leur degré. - -**Question** - - - -**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/TP4.md b/TP/TP4.md deleted file mode 100644 index 625e1a9..0000000 --- a/TP/TP4.md +++ /dev/null @@ -1,67 +0,0 @@ -TP Graphes 4 : Plus Court Chemin et Arbre Recouvrant Minimal -============ - -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 une nouvelle classe, en copiant les structures et fonctions nécessaires depuis les TPs précédants. - - -- - - - - -Exercice 0 : Graphes valués ----------- - -Nous avons enrichi nos graphes avec une valuation des arêtes. - -**Question :** - -Comment intégrer cela à notre structure de données ? - - -Quel fonction(s) faut-il modifier pour prendre en compte cet enrichissement ? - -**Question :** - -Créez une nouvelle classe GraphesValues.java contenant la structure et les primitives nécessaires à la manipulation des graphes valués. - - -- - - - - -Exercice 1 : Algorithme de Dijkstra ----------- - - - -L'algorithme de Dijkstra renvoie deux données : la fonction d donnant la distance minimale entre la source et un sommet, et la fonction père donnant la direction à prendre pour atteindre cette distance minimale. - -**Question :** - -Une fonction des sommets vers un entier (ou un autre sommet) sera représentée par un tableau où la case i contient la valeur de la fonction pour i. - -Nous souhaitons cependant renvoyer deux fonctions. Comment modéliser cela ? - -**Question :** - -Implémentez l'algorithme de Dijsktra, que je redonne ci-dessous : - - - - -**Question :** - -Testez votre algorithme en reprenant le graphes des frontières avec des valuation de votre choix. -Vérifier à la main que l'algorithme effectue les bons calculs. - - - -- - - - - -Exercice 2 : Algorithme de Prim ----------- - -Pour simplifier l'implémentation, on se contentera d'afficher sur la sortie standard les arêtes sélectionnées. On renverra tout de même la valuation totale de l'arbre couvrant. - - - - -**Question :** -Implémentez l'algorithme de Prim. Il n'y a pas besoin de modéliser l'ensemble T puisque l'on va l'afficher sur la sortie standard tout au long de l'algorithme. - -**Question :** -Testez et vérifiez votre implémentation sur un exemple, au hasard le graphe des frontières. \ No newline at end of file diff --git a/TP/WelshPowell.png b/TP/WelshPowell.png deleted file mode 100644 index 333a2c1..0000000 Binary files a/TP/WelshPowell.png and /dev/null differ diff --git a/TP/dijkstra.png b/TP/dijkstra.png deleted file mode 100644 index 5bfae8d..0000000 Binary files a/TP/dijkstra.png and /dev/null differ diff --git a/TP/fonctionsAide.c b/TP/fonctionsAide.c deleted file mode 100644 index b81e812..0000000 --- a/TP/fonctionsAide.c +++ /dev/null @@ -1,85 +0,0 @@ -#include<graph.h> -#include <math.h> - - -void visuelGraphe(graphe g){ - int taille=1000; - int origine=taille/2; - int distance=4*origine/5; - int tailleVert=taille/20; - InitialiserGraphique(); - CreerFenetre(10,10,taille,taille); - - int i,j; - int x,y; - char* nV=malloc(2); - *nV='0'; - *(nV+1)='\0'; - int* cX=calloc(g.ordre,sizeof(int)); - int* cY=calloc(g.ordre,sizeof(int)); - for(i=0;i<g.ordre;i++){ - x=(int) origine+distance*cos(2*M_PI*i/g.ordre); - y=(int) origine+distance*sin(2*M_PI*i/g.ordre); - cX[i]=x+tailleVert/2; - cY[i]=y+tailleVert/2; - RemplirArc(x,y,tailleVert,tailleVert,0,360); - EcrireTexte(x,y,nV,2); - (*nV)++; - - } - - -//Version si le graphe est une matrice d'adjacence - for(i=0;i<g.ordre;i++){ - for(j=0;j<g.ordre;j++){ - if(g.adj[i][j]!=0){ - DessinerSegment(cX[i],cY[i],cX[j],cY[j]); - } - } - } -//Version à utiliser si le graph est un tableau de listes chaînées -/* - maillon* read; - for(i=0;i<g.ordre;i++){ - read=g.voisins[i]; - while(read!=NULL){ - DessinerSegment(cX[i],cY[i],cX[read->valeur],cY[read->valeur]); - read=read->suivant; - } - } -*/ - Touche(); - FermerGraphique(); - -} - - - -//Aides matrices -//Creation matrice carrée vide : -int** creerMatriceId(int taille){ - int** res=calloc(taille,sizeof(int*)); - for(int i=0;i<taille;i++){ - res[i]=calloc(taille,sizeof(int)); - for(int j=0;j<taille;j++){ - res[i][j]=(i==j)?1:0; - } - } - return res; -} - -//Creation copie d'une matrice carree : -int** recopierMatrice(int **m,int taille){ - int** creerMatriceId(int taille){ - int** res=calloc(taille,sizeof(int*)); - for(int i=0;i<taille;i++){ - res[i]=calloc(taille,sizeof(int)); - for(int j=0;j<taille;j++){ - res[i][j]=m[i][j]; - } - } - return res; -} -} - - diff --git a/TP/parcoursLargeur.png b/TP/parcoursLargeur.png deleted file mode 100644 index 01dd760..0000000 Binary files a/TP/parcoursLargeur.png and /dev/null differ diff --git a/TP/parcoursProfondeur.png b/TP/parcoursProfondeur.png deleted file mode 100644 index 5ff2aee..0000000 Binary files a/TP/parcoursProfondeur.png and /dev/null differ diff --git a/TP/prim.png b/TP/prim.png deleted file mode 100644 index b077d81..0000000 Binary files a/TP/prim.png and /dev/null differ