Skip to content
Snippets Groups Projects
Commit 84d5a584 authored by Pierre Kunzli's avatar Pierre Kunzli
Browse files

modifs cours 25

parent 02e16eb4
No related branches found
No related tags found
1 merge request!14modifs cours 25
Pipeline #18879 passed
--- ---
title: "Graphes - Généralités" title: "Graphes - Plus court chemin avec l'algorithme de Dijkstra"
date: "2022-05-03" date: "2022-05-03"
patat: patat:
eval: eval:
...@@ -172,8 +172,9 @@ tab dijkstra(graph, s, t) ...@@ -172,8 +172,9 @@ tab dijkstra(graph, s, t)
si u == t si u == t
retourne distance retourne distance
q = remove(q, u) q = remove(q, u)
pour chaque v dans voisinage(u, q) // voisin de u encore dans q // voisin de u encore dans q
n_distance = distance[u] + w(i, v) pour chaque v dans voisinage(u, q)
n_distance = distance[u] + w(u, v)
si n_distance < distance[v] si n_distance < distance[v]
distance[v] = n_distance distance[v] = n_distance
retourne distance retourne distance
...@@ -207,8 +208,9 @@ tab, tab dijkstra(graph, s, t) ...@@ -207,8 +208,9 @@ tab, tab dijkstra(graph, s, t)
si u == t si u == t
retourne distance retourne distance
q = remove(q, u) q = remove(q, u)
pour chaque v dans voisinage(u, q) // voisin de u encore dans q // voisin de u encore dans q
n_distance = distance[u] + w(i, v) pour chaque v dans voisinage(u, q)
n_distance = distance[u] + w(u, v)
si n_distance < distance[v] si n_distance < distance[v]
distance[v] = n_distance distance[v] = n_distance
précédent[v] = u précédent[v] = u
...@@ -217,7 +219,7 @@ tab, tab dijkstra(graph, s, t) ...@@ -217,7 +219,7 @@ tab, tab dijkstra(graph, s, t)
# Algorithme de Dijkstra # 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) ...@@ -225,11 +227,12 @@ tab, tab dijkstra(graph, s, t)
pile parcours(précédent, s, t) pile parcours(précédent, s, t)
sommets = vide sommets = vide
u = t u = t
si u != s || précédent[u] != indéfini // on a atteint t // on a atteint t ou on ne connait pas de chemin
tant que vrai // la source est atteinte si u != s && précédent[u] != indéfini
tant que vrai
sommets = empiler(sommets, u) sommets = empiler(sommets, u)
u = précédent[u] u = précédent[u]
si u == s si u == s // la source est atteinte
retourne sommets retourne sommets
retourne sommets retourne sommets
``` ```
...@@ -392,7 +395,7 @@ pile parcours(précédent, s, t) ...@@ -392,7 +395,7 @@ pile parcours(précédent, s, t)
* Elle existe en deux saveurs: `min` ou `max`: * Elle existe en deux saveurs: `min` ou `max`:
* File `min`: les éléments les plus petits sont retirés en premier. * 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. * 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? ## Comment on fait ça?
...@@ -408,7 +411,7 @@ pile parcours(précédent, s, t) ...@@ -408,7 +411,7 @@ pile parcours(précédent, s, t)
booléen est_vide(élément) // triviale booléen est_vide(élément) // triviale
élément enfiler(élément, data, priorité) élément enfiler(élément, data, priorité)
data défiler(élément) data défiler(élément)
rien modifiier_priorité(élément, data, priotié) rien modifier_priorité(élément, data, priotié)
nombre priorité(data) // utilitaire nombre priorité(data) // utilitaire
``` ```
...@@ -465,7 +468,7 @@ data, élément défiler(élément) ...@@ -465,7 +468,7 @@ data, élément défiler(élément)
retourne tmp, n_élément retourne tmp, n_élément
``` ```
# Algorithme de Dijkstra avec file # Algorithme de Dijkstra avec file de priorité min
```C ```C
distance, précédent dijkstra(graphe, s, t): distance, précédent dijkstra(graphe, s, t):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment