Vous êtes sur la page 1sur 5

TP3 Fondements de l’intelligence artificielle

Méthode de recherche en profondeur


Nous nous baserons dans cette partie sur le même modèle de graphe que celui utilisé pour la
description du parcours en largeur :
Prenons l'exemple de ce graphe :

On utilisera un dictionnaire python de la façon suivante:

G = dict()
G['a'] = ['b','c']
G['b'] = ['a','d','e']
G['c'] = ['a','d']
G['d'] = ['b','c','e']
G['e'] = ['b','d','f','g']
G['f'] = ['e','g']
G['g'] = ['e','f','h']
G['h'] = ['g']

Programmation Python du DFS (Depth First


Search)
Avec la représentation d'un graphe par un dictionnaire comme précédemment, nous allons
programmer en langage Python le DFS avec les variables suivantes :
• Un dictionaire P tel que, en fin de parcours, pour tout sommet S du graphe, P[S] sera
le père de S, c'est-à-dire le sommet à partir duquel le sommet S a été découvert lors du
parcours.
• Un dictionnaire couleur tel que, pour tout sommet S, couleur[S] soit blanc si le
sommet S n'est pas passé dans la file, gris si le sommet S est dans la file et noir si le
sommet S est sorti de la file.
• Une liste Q utilisée comme Pile (LIFO)

Voici un exemple de déroulement de la fonction avec l'appel dfs(G, 'b'):


P = {'g' : None}

Q = ['g']

Découverts(gris ou noirs) = ['g']

Fermés(noirs) = []

P = {'g':None , 'e':'g'}

Q = ['g', 'e']

Découverts(gris ou noirs) = ['g', 'e']

Fermés(noirs) = []

P = {'g':None , 'e':'g' , 'b':'e'

Q = ['g', 'e', 'b']

Découverts(gris ou noirs) = ['g', 'e', 'b']

Fermés(noirs) = []

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b'

Q = ['g', 'e', 'b', 'a']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a']

Fermés(noirs) = []

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a'}

Q = ['g', 'e', 'b', 'a', 'c']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c']

Fermés(noirs) = []

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c'}

Q = ['g', 'e', 'b', 'a', 'c', 'd']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd']

Fermés(noirs) = []
P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c'}

Q = ['g', 'e', 'b', 'a', 'c']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd']

Fermés(noirs) = ['d']

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c'}

Q = ['g', 'e', 'b', 'a']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd']

Fermés(noirs) = ['d', 'c']

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c'}

Q = ['g', 'e', 'b']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd']

Fermés(noirs) = ['d', 'c', 'a']

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c'}

Q = ['g', 'e']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd']

Fermés(noirs) = ['d', 'c', 'a', 'b']

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c' ,'f':'e'}

Q = ['g', 'e', 'f']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd', 'f']

Fermés(noirs) = ['d', 'c', 'a', 'b']

P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c' ,'f':'e'}

Q = ['g', 'e']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd', 'f']

Fermés(noirs) = ['d', 'c', 'a', 'b', 'f']


P = {'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c' ,'f':'e'}

Q = []

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd', 'f']

Fermés(noirs) = ['d', 'c', 'a', 'b', 'f', 'e']

P =
{'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c' ,'f':'e' , 'h':'g
'}

Q = ['g', 'h']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd', 'f',


'h']

Fermés(noirs) = ['d', 'c', 'a', 'b', 'f', 'e']

P =
{'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c' ,'f':'e' , 'h':'g
'}

Q = ['g']

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd', 'f',


'h']

Fermés(noirs) = ['d', 'c', 'a', 'b', 'f', 'e' 'h']

P =
{'g':None , 'e':'g' , 'b':'e' , 'a':'b' , 'c':'a' , 'd':'c' ,'f':'e' , 'h':'g
'}

Q = []

Découverts(gris ou noirs) = ['g', 'e', 'b', 'a', 'c', 'd', 'f',


'h']

Fermés(noirs) = ['d', 'c', 'a', 'b', 'f', 'e', 'h', 'g']

L'arborescence associée au parcours peut donc être modélisée de la façon suivante :

Vous aimerez peut-être aussi