Graphes/TP/TP4.md
2023-03-14 16:28:15 +01:00

2.5 KiB

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

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

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.