Skip to content
Snippets Groups Projects
Verified Commit d8854274 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

fini parcours en profondeur

parent 9160c248
Branches
No related tags found
No related merge requests found
...@@ -601,8 +601,8 @@ $$ ...@@ -601,8 +601,8 @@ $$
* Trouver un chemin d'un sommet à un autre; * Trouver un chemin d'un sommet à un autre;
* Trouver si le graphe est connexe; * Trouver si le graphe est connexe;
* Il existe *deux* parcours principaux: * Il existe *deux* parcours principaux:
* en largeur; * en largeur (Breadth-First Search);
* en profondeur. * en profondeur (Depth-First Search).
* Ces parcours créent *un arbre* au fil de l'exploration (si le graphe est non-connexe cela crée une *forêt*, un ensemble d'arbres). * Ces parcours créent *un arbre* au fil de l'exploration (si le graphe est non-connexe cela crée une *forêt*, un ensemble d'arbres).
# Illustration: parcours en largeur # Illustration: parcours en largeur
...@@ -744,7 +744,7 @@ initialiser(graphe) // tous sommets sont non-visités ...@@ -744,7 +744,7 @@ initialiser(graphe) // tous sommets sont non-visités
file = visiter(sommet) // sommet est un sommet du graphe au hasard file = visiter(sommet) // sommet est un sommet du graphe au hasard
tant que !est_vide(file) tant que !est_vide(file)
v = défiler(file) v = défiler(file)
file = visiter(u) file = visiter(v)
``` ```
## Que fait visiter? ## Que fait visiter?
...@@ -807,4 +807,76 @@ graph LR; ...@@ -807,4 +807,76 @@ graph LR;
![Le parcours en profondeur. À quel parcours d'arbre cela ressemble-t-il?](figs/parcours_prof.pdf){width=80%} ![Le parcours en profondeur. À quel parcours d'arbre cela ressemble-t-il?](figs/parcours_prof.pdf){width=80%}
# Parcours en profondeur
## Idée générale
* Initialiser les sommets comme non-lus
* Visiter un sommet
* Pour chaque sommet visité, on visite un sommet adjacent s'il est pas encore visité récursivement.
## Remarque
* La récursivité est équivalent à l'utilisation d'une **pile**.
# Parcours en profondeur
## Pseudo-code (5min)
. . .
```C
initialiser(graphe) // tous sommets sont non-visités
pile = visiter(sommet) // sommet est un sommet du graphe au hasard
tant que !est_vide(pile)
v = dépiler(pile)
pile = visiter(v)
```
## Que fait visiter?
. . .
```C
pile visiter(sommet)
sommet = visité
pour w = chaque arête de sommet
si w != visité
pile = empiler(pile, w)
retourne pile
```
# Exercice
* Établir la liste d'adjacence et appliquer l'algorithme de parcours en profondeur au graphe
```{.mermaid format=pdf width=400 loc=figs/}
graph LR;
1---2;
1---3;
1---4;
2---3;
2---6;
3---6;
3---4;
3---5;
4---5;
```
# Interprétation des aprcours
* Un graphe vu comme espace d'états (sommet: état, arête: action);
* Labyrinthe;
* Arbre des coups d'un jeu.
. . .
* BFS (Breadth-First) ou DFS (Depth-First) parcourent l'espace des états à la recherche du meilleur mouvement.
* Les deux parcourent *tout* l'espace;
* Mais si l'arbre est grand, l'espace est gigantesque!
. . .
* BFS explore beaucoup de coups dans un futur proche;
* DFS explore peu de coups dans un futur lointain.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment