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
No related merge requests found
--- ---
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