diff --git a/slides/cours_25.md b/slides/cours_25.md index ec0426651a039b94c3fc76cf3502b85c92fb2332..d72e15bebd03bd5566ae74d62e69009485f007eb 100644 --- a/slides/cours_25.md +++ b/slides/cours_25.md @@ -1,5 +1,5 @@ --- -title: "Graphes - Généralités" +title: "Graphes - Plus court chemin avec l'algorithme de Dijkstra" date: "2022-05-03" patat: eval: @@ -172,8 +172,9 @@ tab dijkstra(graph, s, t) si u == t retourne distance q = remove(q, u) - pour chaque v dans voisinage(u, q) // voisin de u encore dans q - n_distance = distance[u] + w(i, v) + // voisin de u encore dans q + pour chaque v dans voisinage(u, q) + n_distance = distance[u] + w(u, v) si n_distance < distance[v] distance[v] = n_distance retourne distance @@ -207,8 +208,9 @@ tab, tab dijkstra(graph, s, t) si u == t retourne distance q = remove(q, u) - pour chaque v dans voisinage(u, q) // voisin de u encore dans q - n_distance = distance[u] + w(i, v) + // voisin de u encore dans q + pour chaque v dans voisinage(u, q) + n_distance = distance[u] + w(u, v) si n_distance < distance[v] distance[v] = n_distance précédent[v] = u @@ -217,7 +219,7 @@ tab, tab dijkstra(graph, s, t) # Algorithme de Dijkstra -## Comment faire pour avoir toutes les plus petites distances à tous les autres noeuds? +## Comment reconstruire un chemin ? . . . @@ -225,11 +227,12 @@ tab, tab dijkstra(graph, s, t) pile parcours(précédent, s, t) sommets = vide u = t - si u != s || précédent[u] != indéfini // on a atteint t - tant que vrai // la source est atteinte + // on a atteint t ou on ne connait pas de chemin + si u != s && précédent[u] != indéfini + tant que vrai sommets = empiler(sommets, u) u = précédent[u] - si u == s + si u == s // la source est atteinte retourne sommets retourne sommets ``` @@ -392,7 +395,7 @@ pile parcours(précédent, s, t) * Elle existe en deux saveurs: `min` ou `max`: * File `min`: les éléments les plus petits sont retirés en premier. * File `max`: les éléments les plus grands sont retirés en premier. -* On s'intéresse à la `max`. +* On regarde l'implémentation de la `max`. ## Comment on fait ça? @@ -408,7 +411,7 @@ pile parcours(précédent, s, t) booléen est_vide(élément) // triviale élément enfiler(élément, data, priorité) data défiler(élément) -rien modifiier_priorité(élément, data, priotié) +rien modifier_priorité(élément, data, priotié) nombre priorité(data) // utilitaire ``` @@ -465,7 +468,7 @@ data, élément défiler(élément) retourne tmp, n_élément ``` -# Algorithme de Dijkstra avec file +# Algorithme de Dijkstra avec file de priorité min ```C distance, précédent dijkstra(graphe, s, t):