Les fonctions utilitaires que vous n'avez pas besoin de programmer sont dans l'archive http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0809/info505/tp.tgz .
identifiants.c
contenant du code C valide. Votre fichier doit compiler si vous utilisez le Makefile (après modification de la variable NOM
) et les fichiers complémentaires fournit dans l'archive http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0809/info505/tp.tgzVotre code doit être autosuffisant, c'est à dire bien commenté, lisible et clair. Utilisez l'indentation correctement et n'abusez pas des espaces.
Les réponses aux questions plus théoriques devront se trouver en commentaire avant les fonctions pertinentes.
Par rapport à ce qui a été dit en cours, on a rajouté un poids pour les arcs du graphes.
int **M
afin de ne pas avoir à s'embêter avec la largeur de la matrice. Suivant les applications que vous envisagez, il pourrait être plus intéressant d'aplatir le tableau en un int *M
.Les fonctions que vous devrez programmer sont les suivantes :
afficheGrapheListe
, une petite fonction d'affichage en mode texte. Voici par exemple un type d'affichage possible : Le graphe a 8 sommets : 0 --(5)--> 2 0 --(4)--> 1 1 --(6)--> 2 2 --(7)--> 3 3 --(8)--> 4 4 --(9)--> 5 5 --(10)--> 6 6 --(11)--> 7 7 --(12)--> 0 Le graphe a 9 arcs
listeVersMatrice
et matriceVersListe
, les deux fonctions de conversion entre la représentation sous forme de liste d'adjacence et sous forme de matrice d'adjacence,
transpose
, la fonction qui calcule l'inverse d'un graphe en renversants tous les arcs.
Si un sommet reçoit deux couleurs, alors c'est qu'il n'est pas biparti ; et si le parcours termine normalement, alors c'est que le graphe est biparti : un ensemble de sommets ROUGEs et un ensemble de sommets VERTs.
Décrivez votre algorithme avant de l'implanter et de le tester (fonction biparti
).
Cette fonction prend en argument un graphe sous forme de liste d'adjacence, et renvoie un tableau de couleur qui donne la couleur de chaque sommet dans le graphe biparti, ou bien le pointeur NULL si le graphe n'est pas biparti.
diametre
qui devra calculer le diamètre d'un graphe, c'est a dire la plus grande distance entre deux sommets du graphe.Votre algorithme devra être économe et faire aussi peu de parcours que possible...
Estimez la complexité de votre programme.