5. Compl´etez l’algorithme pr´ec´edent pour qu’il affiche les chemins les plus courts entre
s et tous les sommets de G (du coup, on n’aura plus besoin qu’il affiche les tableaux
dist et pred. Pour cela, vous pourrez aussi ´ecrire des fonctions
—int affiche plus court chemin(int s, int t, int pred[]) qui affiche le plus
court chemin de s `a t et renvoie 0 s’il n’existe pas, et
—void affiche plus courts chemins(int s, int nbSommets, int pred[], int
dist[]) qui affiche tous les plus courts chemins `a partir de s, avec leur distance.
Plus court chemin de 2 `a 0 : sommet non atteint.
Plus court chemin de 2 `a 1 : 2 3 1 . Distance : 6
Plus court chemin de 2 `a 2 : 2 . Distance : 0
Plus court chemin de 2 `a 3 : 2 3 . Distance : 4
Plus court chemin de 2 `a 4 : 2 3 1 4 . Distance : 12
Plus court chemin de 2 `a 5 : 2 3 1 4 5 . Distance : 14
6. (difficile) Si l’on impl´emente Fcomme un tableau, la recherche du sommet i pour
lequel dist[i] est minimale est lin´eaire : d’o`u une complexit´e de O(n2) au total,
o`u n=G.nbSommets. Si l’on impl´emente Fcomme une file de priorit´e, c’est-`a-dire
un tasmin muni d’une fonctionnalit´e de mise `a jour, on obtient une complexit´e de
O(nlog n). ´
Ecrivez cette variante de l’algorithme de Dijkstra : void dijkstraFP(int
s, GRAPHE G). Pour cela,
— vous introduirez les variables int f[NB SOM MAX], nf, ind f[NB SOM MAX],o`uf
repr´esente le tasmin prioritaris´e par dist 1,nf est le nombre d’´el´ements du tasmin
et ind f[i] donne l’indice du sommet idans le tasmin f;
— la fonction int extrait min(int f[], int ind f[], int *nf, int dist[]) ex-
trait le min de f, c’est-`a-dire f[0], tout en pr´eservant la structure de tasmin et en
actualisant ind f
— la fonction void maintient(int f[], int ind f[], int i, int dist[]) qui
maintient la structure de fet la s´emantique de ind f lorsque dist[i] a´et´ediminu´e
pour un sommet ide f.
7. (difficile) La structure que nous avons consid´er´ee pour les listes d’adjacence est mi-
dynamique (les listes d’adjacences elles-mˆemes), mi-statique (on d´eclare un tableau de
NB SOM MAX listes d’adjacence). Comment faire en sorte que la structure soit totalement
dynamique, c’est-`a-dire ne d´epende pas de la constante NB SOM MAX ?
1. si iest un ascendant de j, alors dist[i]dist[j].
3