TD/TP semaine 2
This commit is contained in:
parent
f174afd188
commit
2b61f8eb86
92
TP/TP2.md
Normal file
92
TP/TP2.md
Normal file
@ -0,0 +1,92 @@
|
||||
TP Graphes 2 : Chemins et connexité
|
||||
============
|
||||
|
||||
Le TP est prévu pour être fait en utilisant le codage des graphes à l'aide de matrices d'adjacence.
|
||||
|
||||
- - - - -
|
||||
Exercice 0 : Affichage
|
||||
----------
|
||||
|
||||
***Question :***
|
||||
Ecrire une fonction permettant d'afficher une matrice carrée (la taille de la matrice sera donnée en argument) :
|
||||
```
|
||||
void afficherMatrice(int **m,int taille);
|
||||
```
|
||||
|
||||
|
||||
**Question :**
|
||||
Ecrire une fonction permettant d'afficher la matrice d'adjacence d'un graphe donné en argument :
|
||||
```
|
||||
void afficherAdjacence(graphe g);
|
||||
```
|
||||
|
||||
- - - - -
|
||||
Exercice 1 : Chemins de longueur fixe
|
||||
----------
|
||||
|
||||
La multiplication de matrices carrées se fait grâce à la fonction de prototype :
|
||||
```
|
||||
int** multiplicationMatriceCarre(int **a,int **b,int size);
|
||||
```
|
||||
|
||||
Le code de la fonction est donné ci-dessous. Si vous le souhaitez, vous pouvez ignorer le code et faire la fonction vous-même.
|
||||
```
|
||||
int** multiplicationMatriceCarre(int **a,int **b,int size){
|
||||
int** res=calloc(size,sizeof(int*));
|
||||
int i,j,k;
|
||||
for(i=0;i<size;i++){
|
||||
res[i]=calloc(size,sizeof(int));
|
||||
}
|
||||
for(i=0;i<size;i++){
|
||||
for(j=0;j<size;j++){
|
||||
for(k=0;k<size;k++){
|
||||
res[i][j]+=a[i][k]*b[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
```
|
||||
|
||||
**Question :**
|
||||
En utilisant la multiplication de matrices carrées, créez une fonction renvoyant une matrice contenant les chemins d'une longueur donnée :
|
||||
```
|
||||
int** nombreDeChemins(graphe g,int longueur);
|
||||
```
|
||||
|
||||
- - - - -
|
||||
Exercice 2 : Connexité
|
||||
----------
|
||||
|
||||
Un graphe (orienté) est (fortement) connexe si pour toute paire de sommet (x,y), il existe un chemin de x à y.
|
||||
De plus, s'il existe un chemin de x à y, alors il en existe un de longueur *au plus* n, où est l'ordre du graphe.
|
||||
|
||||
**Question :**
|
||||
Ecrire la fonction `int estConnexe(graphe g);` renvoyant 1 si le graphe est connexe, et 0 sinon.
|
||||
Indice : vous aurez besoin d'une fonction permettant d'additionner des matrices.
|
||||
|
||||
**Question :**
|
||||
Testez votre fonction sur le graphe des frontières.
|
||||
Créez un graphe similaire ayant en plus le Royaume-Uni. Vérifiez que ce graphe n'est pas connexe.
|
||||
|
||||
|
||||
- - - - -
|
||||
Exercice 3 : Chemins Eulériens
|
||||
----------
|
||||
|
||||
***Question***
|
||||
En utilisant le théorème d'Euler, écrire une fonction décidant si un graphe a un chemin eulérien.
|
||||
Théorème d'Euler :
|
||||
Un graphe est eulérien si, et seulement si, il est connexe et tous ses sommets sont de degré pair.
|
||||
|
||||
- - - - -
|
||||
Exercice 4 : Distance et diamètre.
|
||||
----------
|
||||
|
||||
***Question***
|
||||
Ecrire une fonction ```int** distances(graphe g);``` renvoyant une matrice dont le coefficient (i,j) contient la distance entre i et j.
|
||||
Indice : Les sommets à distance 1 sont ceux qui sont adjacent (valeur 1 dans la matrice d'adjacence).
|
||||
De façon générale, un sommet x est à distance l d'un sommet y si il existe un chemin de longueur l mais aucun chemin de longueur l-1.
|
||||
|
||||
***Question***
|
||||
Ecrire une fonction ```int diametre(graphe g)``` retournant le diamètre du graphe passé en paramètre.
|
BIN
td/TD2.pdf
Normal file
BIN
td/TD2.pdf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user