Les fonctions à écrire sont les suivantes :
diametre
pour calculer le diamètre d'un graphe (Diamètre d'un graphe), composantesFortemenentConnexes
pour calculer les composantes fortement connexes d'un graphe orienté (Composantes fortement connexes), tri_topologique
pour linéariser un graphe orienté sans cycle (Le tri topologique), prim
pour calculer un arbre couvrant de poids minimal (Algorithme de Prim). L'archive contenant les fichiers necessaires pour le TP se trouve ici : http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0809/info505/tp.tgz .
debut
, initialisé à -1 pour tous les sommets, fin
, initialisé à -1 pour tous les sommets.
Ces deux tableaux seront passés en paramètres à la fonction parcours_profondeur
, et vous écrirez une fonction int foret(int debut[], int fin[]);
qui calculera la foret couvrante à partir des 2 tableaux debut
et fin
.
int fib (int n); int fib (int n) { if (n<2) return n; else return(fib(n-1)+fib(n-2)); }
Je dois pouvoir reconnaître l'algo dans votre code source au premier coup d'oeil. Si vous deviez de l'algo donné en cours, justifiez les changements.
L'algorithme est le suivant :
tri_topologique(G) { liste := NULL // une liste chaînée parcours_profondeur_bis(G) // comme parcours_profondeur[], mais // chaque fois qu'un sommet devient // "examiné", on le place en tête de // "liste" renvoie(liste) }
Le prototype de la fonction que vous devez programmer est le suivant :
int*triTopologique (const GrapheListe G);
Vous aurez probablement besoin de définir des fonctions auxiliaires...
Essayez de faire ça intelligemment...
Vous aurez probablement besoin d'utiliser une variante de cette fonction lors du TP3, alors essayez de la faire.