Skip to content
Snippets Groups Projects

modifs cours 25

Merged pierre.kunzli requested to merge pk into master
1 file
+ 15
12
Compare changes
  • Side-by-side
  • Inline
+ 15
12
---
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):
Loading