Compare commits
No commits in common. "6b1318634f838c2db8279eff59f94b723a386232" and "ea9abf3f6ae0a05dc514fd405f46a41d8bfadf44" have entirely different histories.
6b1318634f
...
ea9abf3f6a
73
TP/TP4.md
73
TP/TP4.md
@ -1,73 +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 un nouveau fichier, 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 un nouveau fichier graphesvalues.c 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.
|
|
||||||
|
|
||||||
Le C ne permettant de renvoyer qu'une structure de données, comment permettre de renvoyer les deux fonctions ?
|
|
||||||
|
|
||||||
**Question :**
|
|
||||||
|
|
||||||
Implémentez l'algorithme de Dijsktra, que je redonne ci-dessous :
|
|
||||||
|
|
||||||
[Algorithme de Dijkstra](dijkstra.png)
|
|
||||||
|
|
||||||
|
|
||||||
**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.
|
|
||||||
|
|
||||||
[Algorithme de Prim](prim.png)
|
|
||||||
|
|
||||||
|
|
||||||
**Question (optionnelle) :**
|
|
||||||
|
|
||||||
Comme pour Dijkstra, l'ensemble des sommets atteint sera représenté par un tableau binaire.
|
|
||||||
Ecrivez une fonction `void selecArete(graphe g,int* atteint,int* x,int* y);`
|
|
||||||
qui trouve et dans le graphe g l'arête de poids minimale entre un sommet atteint et un sommet non atteint. Le résultat est stocké dans les arguments pointés x et y selon la nomenclature de l'algorithme.
|
|
||||||
|
|
||||||
**Question :**
|
|
||||||
Implémentez l'algorithme de Prim en vous aidant de la fonction de la question précédente, ou directement.
|
|
||||||
|
|
||||||
**Question :**
|
|
||||||
Testez et vérifiez votre implémentation sur un exemple, au hasard le graphe des frontières.
|
|
BIN
TP/dijsktra.png
BIN
TP/dijsktra.png
Binary file not shown.
Before Width: | Height: | Size: 67 KiB |
BIN
TP/prim.png
BIN
TP/prim.png
Binary file not shown.
Before Width: | Height: | Size: 85 KiB |
Loading…
Reference in New Issue
Block a user