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.