Licence Informatique Algorithmique des graphes 2019–2020
Plus courts chemins (2)
Ce document reprend les algorithmes vus au cours. Par convention, ils sont impl´ement´es sous la forme de fonctions avec un nom utilisantcette police. Si vous la voyez apparaˆıtre dans un algorithme, cela signifie donc qu’on fait appel `a un autre algorithme d´ej`a vu.
Algorithme 1 :BellmanFord(G, source)
Entr´ees : un graphe pond´er´e orient´eG, un sommet source.
Sortie : la longueur d’un plus court chemin de la source `a chacun des sommets du graphe (+∞
pour les sommets non accessibles), ounilsi le graphe contient un cycle n´egatif.
1 distances ←tableau(G.nombre sommets(), +∞);
2 distances[source] ←0;
// parcourir chaque arc |V| fois
3 pour iallant de1 `aG.nombre sommets()faire
4 pour chaque(u, v, p)∈G.arcs()faire
5 distances[v] ←min(distances[v], distances[u] +p);
// v´erifier la pr´esence d’un cycle n´egatif
6 pour chaque(u, v, p)∈G.arcs()faire
7 sidistances[v]>distances[u] + palors renvoyernil;
8 renvoyer distances;
Algorithme 2 :FloydWarshall(G) Entr´ees : un graphe orient´e pond´er´eG.
Sortie : la matrice des distances entre toute paire de sommets du graphe.
1 distances ←matrice(G.nombre sommets(),G.nombre sommets(), +∞);
2 pour iallant de0 `aG.nombre sommets()−1faire
3 distances[i][i]←0;
4 pour chaque(u, v, p)∈G.arcs()faire
5 distances[u][v]←p;
// chercher les am´eliorations en passant par k= 0,1,2, . . .
6 pour kallant de0 `aG.nombre sommets()−1faire
7 pour iallant de0 `aG.nombre sommets()−1faire
8 pour j allant de0 `aG.nombre sommets()−1faire
9 distances[i][j]←min(distances[i][j], distances[i][k]+distances[k][j]);
10 renvoyer distances;
Page 1 / 1