parcours d'un graphe

123
Parcours d’un graphe ISN 2013 Jean-Manuel M´ eny – IREM de LYON () Algorithmique ISN 2013 1 / 97

Upload: phammien

Post on 05-Jan-2017

232 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Parcours d'un graphe

Parcours d’un graphe

ISN 2013

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 1 / 97

Page 2: Parcours d'un graphe

Exercices a rendre

Trois exercices sont a rendre.

L’ exercice 1 pourra etre rendu sur papier mardi 2 avril (ou en versionelectronique si vous preferez).

Les exercices 2 et 3 sont a rendre dans les casiers numeriques de vosenseignants lundi 1 avril.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 2 / 97

Page 3: Parcours d'un graphe

A savoir

A la suite de cette seance, vous devrez savoir parcourir un graphe enprofondeur et en largeur.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 3 / 97

Page 4: Parcours d'un graphe

L’essentiel de la notion de graphe

On peut apprehender la notion de graphe par l’une de ses representationsclassiques : des points (sommets du graphe) et des courbes reliant certainsde ces points (aretes du graphe).

g

a

h

b c

de

f

1

2

3

4

5

67

8

9

10

11

12

Les sommets de ce graphe sont a, b, c , d , e, f , g , h. Les sommets e et csont adjacents (voisins) : ils sont en effet relies par l’arete 10. Le sommetb a pour voisins h, f et c . Le sommet a est incident aux aretes 2 et 3.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 4 / 97

Page 5: Parcours d'un graphe

L’essentiel de la notion de graphe

On peut apprehender la notion de graphe par l’une de ses representationsclassiques : des points (sommets du graphe) et des courbes reliant certainsde ces points (aretes du graphe).

g

a

h

b c

de

f

1

2

3

4

5

67

8

9

10

11

12

Lorsqu’on passe d’un sommet a un autre en se deplacant le long d’aretes etde sommets, on dit que l’on definit un chemin dans le graphe. On peut parexemple definir le chemin g, 3, a, 2, h, 5, b, 7, f dans le graphe ci-dessus.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 4 / 97

Page 6: Parcours d'un graphe

Exemples de situations modelisees par un graphe

Le web : chaque page est un sommet du graphe, chaque lienhypertexte est une arete entre deux sommets.

Un reseau ferroviaire : chaque gare est un sommet, les voies entredeux gares sont les aretes. Idem avec un reseau routier.

Un reseau social : les sommets sont les personnes, deux personnessont adjacentes dans ce graphe lorsqu’elles sont “amies”.Si la notion d’amitie n’est pas reciproque, le graphe est oriente.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 5 / 97

Page 7: Parcours d'un graphe

Exemples de situations modelisees par un graphe

Le web : chaque page est un sommet du graphe, chaque lienhypertexte est une arete entre deux sommets.

Un reseau ferroviaire : chaque gare est un sommet, les voies entredeux gares sont les aretes. Idem avec un reseau routier.

Un reseau social : les sommets sont les personnes, deux personnessont adjacentes dans ce graphe lorsqu’elles sont “amies”.Si la notion d’amitie n’est pas reciproque, le graphe est oriente.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 5 / 97

Page 8: Parcours d'un graphe

Exemples de situations modelisees par un graphe

Le web : chaque page est un sommet du graphe, chaque lienhypertexte est une arete entre deux sommets.

Un reseau ferroviaire : chaque gare est un sommet, les voies entredeux gares sont les aretes. Idem avec un reseau routier.

Un reseau social : les sommets sont les personnes, deux personnessont adjacentes dans ce graphe lorsqu’elles sont “amies”.Si la notion d’amitie n’est pas reciproque, le graphe est oriente.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 5 / 97

Page 9: Parcours d'un graphe

Exemples de situations modelisees par un graphe

Le web : chaque page est un sommet du graphe, chaque lienhypertexte est une arete entre deux sommets.

Un reseau ferroviaire : chaque gare est un sommet, les voies entredeux gares sont les aretes. Idem avec un reseau routier.

Un reseau social : les sommets sont les personnes, deux personnessont adjacentes dans ce graphe lorsqu’elles sont “amies”.Si la notion d’amitie n’est pas reciproque, le graphe est oriente.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 5 / 97

Page 10: Parcours d'un graphe

Exemples de situations modelisees par un graphe

Le web : chaque page est un sommet du graphe, chaque lienhypertexte est une arete entre deux sommets.

Un reseau ferroviaire : chaque gare est un sommet, les voies entredeux gares sont les aretes. Idem avec un reseau routier.

Un reseau social : les sommets sont les personnes, deux personnessont adjacentes dans ce graphe lorsqu’elles sont “amies”.Si la notion d’amitie n’est pas reciproque, le graphe est oriente.

La structure de graphe est en science de l’informatique une structureabstraite omnipresente.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 5 / 97

Page 11: Parcours d'un graphe

Representation informatique d’un graphe

Une structure theorique comme un graphe est susceptible de nombreusesimplementations, selon le type de problemes a resoudre.

On peut par exemple utiliser la matrice d’adjacence du graphe.

a

b

c

d

e f

g

h

a b c d e f g h

a 0 1 1 0 0 0 0 0b 1 0 0 1 1 0 0 0c 1 0 0 1 0 0 0 0d 0 1 1 0 1 0 0 0e 0 1 0 1 0 1 1 0f 0 0 0 0 1 0 1 0g 0 0 0 0 1 1 0 1h 0 0 0 0 0 0 1 0

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 6 / 97

Page 12: Parcours d'un graphe

Representation informatique d’un graphe

Une structure theorique comme un graphe est susceptible de nombreusesimplementations, selon le type de problemes a resoudre.

On peut par exemple utiliser la matrice d’adjacence du graphe.

a

b

c

d

e f

g

h

a b c d e f g h

a 0 1 1 0 0 0 0 0b 1 0 0 1 1 0 0 0c 1 0 0 1 0 0 0 0d 0 1 1 0 1 0 0 0e 0 1 0 1 0 1 1 0f 0 0 0 0 1 0 1 0g 0 0 0 0 1 1 0 1h 0 0 0 0 0 0 1 0

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 6 / 97

Page 13: Parcours d'un graphe

Exemple de codage : utilisation d’un dictionnaire python

PythonG=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’]

a

b

c

d

e f

g

h

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 7 / 97

Page 14: Parcours d'un graphe

PILE et FILE

Les notions de pile et de file sont deux structures de donnees abstraitesimportantes en informatique.On limite ci-dessous la presentation de ces notions aux besoins desparcours de graphes envisages ci-apres.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 8 / 97

Page 15: Parcours d'un graphe

PILE (stack)

La structure de pile est celle d’une pile d’assiettes :

Pour ranger les assiettes, on les empile les unes sur les autres.

Lorsqu’on veut utiliser une assiette, c’est l’assiette qui a ete empileeen dernier qui est utilisee.

Structure LIFO (last in, first out)

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 9 / 97

Page 16: Parcours d'un graphe

FILE (queue)

La structure de file est celle d’une file d’attente a un guichet :

Les nouvelles personnes qui arrivent se rangent a la fin de la filed’attente.

La personne servie est celle qui est arrivee en premier dans la file.

Structure FIFO (first in, first out).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 10 / 97

Page 17: Parcours d'un graphe

Parcours de graphe

Parcours en largeur

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 11 / 97

Page 18: Parcours d'un graphe

Parcours en largeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en largeur, on utilise une file. On enfile le sommet dedepart (on visite la page index du site).

2 On visite les voisins de la tete de file (pages ciblees par la page detete de file). On les enfile (en les numerotant au fur et a mesure deleur decouverte) s’ils ne sont pas deja presents dans la file, ni dejapasses dans la file.

3 On defile (c’est a dire : on supprime la tete de file).

4 On recommence au point 2 (tant que c’est possible, c’est a dire tantque la file n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 12 / 97

Page 19: Parcours d'un graphe

Parcours en largeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en largeur, on utilise une file. On enfile le sommet dedepart (on visite la page index du site).

2 On visite les voisins de la tete de file (pages ciblees par la page detete de file). On les enfile (en les numerotant au fur et a mesure deleur decouverte) s’ils ne sont pas deja presents dans la file, ni dejapasses dans la file.

3 On defile (c’est a dire : on supprime la tete de file).

4 On recommence au point 2 (tant que c’est possible, c’est a dire tantque la file n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 12 / 97

Page 20: Parcours d'un graphe

Parcours en largeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en largeur, on utilise une file. On enfile le sommet dedepart (on visite la page index du site).

2 On visite les voisins de la tete de file (pages ciblees par la page detete de file). On les enfile (en les numerotant au fur et a mesure deleur decouverte) s’ils ne sont pas deja presents dans la file, ni dejapasses dans la file.

3 On defile (c’est a dire : on supprime la tete de file).

4 On recommence au point 2 (tant que c’est possible, c’est a dire tantque la file n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 12 / 97

Page 21: Parcours d'un graphe

Parcours en largeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en largeur, on utilise une file. On enfile le sommet dedepart (on visite la page index du site).

2 On visite les voisins de la tete de file (pages ciblees par la page detete de file). On les enfile (en les numerotant au fur et a mesure deleur decouverte) s’ils ne sont pas deja presents dans la file, ni dejapasses dans la file.

3 On defile (c’est a dire : on supprime la tete de file).

4 On recommence au point 2 (tant que c’est possible, c’est a dire tantque la file n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 12 / 97

Page 22: Parcours d'un graphe

Parcours en largeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en largeur, on utilise une file. On enfile le sommet dedepart (on visite la page index du site).

2 On visite les voisins de la tete de file (pages ciblees par la page detete de file). On les enfile (en les numerotant au fur et a mesure deleur decouverte) s’ils ne sont pas deja presents dans la file, ni dejapasses dans la file.

3 On defile (c’est a dire : on supprime la tete de file).

4 On recommence au point 2 (tant que c’est possible, c’est a dire tantque la file n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 12 / 97

Page 23: Parcours d'un graphe

Parcours en largeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en largeur, on utilise une file. On enfile le sommet dedepart (on visite la page index du site).

2 On visite les voisins de la tete de file (pages ciblees par la page detete de file). On les enfile (en les numerotant au fur et a mesure deleur decouverte) s’ils ne sont pas deja presents dans la file, ni dejapasses dans la file.

3 On defile (c’est a dire : on supprime la tete de file).

4 On recommence au point 2 (tant que c’est possible, c’est a dire tantque la file n’est pas vide).

En d’autres termes, on traite toujours en priorite les liens des pages le plustot decouvertes.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 12 / 97

Page 24: Parcours d'un graphe

Parcours en largeur d’un arbre

Parcourir en largeur le graphe ci-dessous a partir du sommet s :s

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 13 / 97

Page 25: Parcours d'un graphe

Parcours en largeur d’un arbre

1

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 14 / 97

Page 26: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Enfiler : passage en gris. Defiler : passage en noir.L’ordre pour enfiler les voisins (ni gris, ni noirs) depend de l’implantation.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 15 / 97

Page 27: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 16 / 97

Page 28: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 17 / 97

Page 29: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 18 / 97

Page 30: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 19 / 97

Page 31: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 20 / 97

Page 32: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 21 / 97

Page 33: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 22 / 97

Page 34: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 23 / 97

Page 35: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 24 / 97

Page 36: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 25 / 97

Page 37: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 26 / 97

Page 38: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 27 / 97

Page 39: Parcours d'un graphe

Parcours en largeur d’un arbre

1

2

5 6

11 12

3

7 8 9

4

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 28 / 97

Page 40: Parcours d'un graphe

Parcours en largeur : une propriete

Une facon de comprendre l’algorithme est d’utiliser une notion dedistance :

une page est a distance 1 de la page de depart si on l’atteint par unlien direct depuis la page 1,

elle est a distance 2 de la page de depart si on peut l’atteindre (par leplus court chemin) en passant par une page a distance 1 du depart,

elle est a distance 3 du depart si on peut l’atteindre (par le plus courtchemin) en passant par une page a distance 1 et une page a distance2. . .

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 29 / 97

Page 41: Parcours d'un graphe

Parcours en largeur : une propriete

Une facon de comprendre l’algorithme est d’utiliser une notion dedistance :

une page est a distance 1 de la page de depart si on l’atteint par unlien direct depuis la page 1,

elle est a distance 2 de la page de depart si on peut l’atteindre (par leplus court chemin) en passant par une page a distance 1 du depart,

elle est a distance 3 du depart si on peut l’atteindre (par le plus courtchemin) en passant par une page a distance 1 et une page a distance2. . .

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 29 / 97

Page 42: Parcours d'un graphe

Parcours en largeur : une propriete

Une facon de comprendre l’algorithme est d’utiliser une notion dedistance :

une page est a distance 1 de la page de depart si on l’atteint par unlien direct depuis la page 1,

elle est a distance 2 de la page de depart si on peut l’atteindre (par leplus court chemin) en passant par une page a distance 1 du depart,

elle est a distance 3 du depart si on peut l’atteindre (par le plus courtchemin) en passant par une page a distance 1 et une page a distance2. . .

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 29 / 97

Page 43: Parcours d'un graphe

Parcours en largeur : une propriete

Une facon de comprendre l’algorithme est d’utiliser une notion dedistance :

une page est a distance 1 de la page de depart si on l’atteint par unlien direct depuis la page 1,

elle est a distance 2 de la page de depart si on peut l’atteindre (par leplus court chemin) en passant par une page a distance 1 du depart,

elle est a distance 3 du depart si on peut l’atteindre (par le plus courtchemin) en passant par une page a distance 1 et une page a distance2. . .

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 29 / 97

Page 44: Parcours d'un graphe

Parcours en largeur : une propriete

Une facon de comprendre l’algorithme est d’utiliser une notion dedistance :

une page est a distance 1 de la page de depart si on l’atteint par unlien direct depuis la page 1,

elle est a distance 2 de la page de depart si on peut l’atteindre (par leplus court chemin) en passant par une page a distance 1 du depart,

elle est a distance 3 du depart si on peut l’atteindre (par le plus courtchemin) en passant par une page a distance 1 et une page a distance2. . .

L’algorithme de parcours en largeur va visiter en premier lieu toutes lespages a distance 1 du depart, puis toutes les pages a distance 2 du depart,puis toutes les pages a distance 3. . .(c’est en fait cette propriete qui donneson nom a ce type de parcours).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 29 / 97

Page 45: Parcours d'un graphe

BFS (breadth first search) : programmation python

Exercice avec corrige.Avec la representation d’un graphe par un dictionnaire commeprecedemment, programmer en langage python le BFS avec les variablessuivantes :

Un dictionnaire P. En fin de parcours, pour tout sommet s du grapheP[s] sera le pere de s, c’est a dire le sommet a partir duquel lesommet s a ete decouvert lors du parcours.

Un dictionnaire couleur. Pour tout sommet s, couleur[s] vaut blanc sile sommet s n’est pas passe dans la file, gris s’il est dans la file, noirlorsqu’il est sorti de la file.

Une liste Q utilisee comme file (fifo) : on enfile un sommet lorsqu’ilest decouvert, on le defile lorsqu’il est termine (traitement prioritairedes sommets decouverts au plus tot).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 30 / 97

Page 46: Parcours d'un graphe

BFS (breadth first search) : programmation python

Exercice avec corrige.Avec la representation d’un graphe par un dictionnaire commeprecedemment, programmer en langage python le BFS avec les variablessuivantes :

Un dictionnaire P. En fin de parcours, pour tout sommet s du grapheP[s] sera le pere de s, c’est a dire le sommet a partir duquel lesommet s a ete decouvert lors du parcours.

Un dictionnaire couleur. Pour tout sommet s, couleur[s] vaut blanc sile sommet s n’est pas passe dans la file, gris s’il est dans la file, noirlorsqu’il est sorti de la file.

Une liste Q utilisee comme file (fifo) : on enfile un sommet lorsqu’ilest decouvert, on le defile lorsqu’il est termine (traitement prioritairedes sommets decouverts au plus tot).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 30 / 97

Page 47: Parcours d'un graphe

BFS (breadth first search) : programmation python

Exercice avec corrige.Avec la representation d’un graphe par un dictionnaire commeprecedemment, programmer en langage python le BFS avec les variablessuivantes :

Un dictionnaire P. En fin de parcours, pour tout sommet s du grapheP[s] sera le pere de s, c’est a dire le sommet a partir duquel lesommet s a ete decouvert lors du parcours.

Un dictionnaire couleur. Pour tout sommet s, couleur[s] vaut blanc sile sommet s n’est pas passe dans la file, gris s’il est dans la file, noirlorsqu’il est sorti de la file.

Une liste Q utilisee comme file (fifo) : on enfile un sommet lorsqu’ilest decouvert, on le defile lorsqu’il est termine (traitement prioritairedes sommets decouverts au plus tot).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 30 / 97

Page 48: Parcours d'un graphe

BFS (breadth first search) : programmation python

Exercice avec corrige.Avec la representation d’un graphe par un dictionnaire commeprecedemment, programmer en langage python le BFS avec les variablessuivantes :

Un dictionnaire P. En fin de parcours, pour tout sommet s du grapheP[s] sera le pere de s, c’est a dire le sommet a partir duquel lesommet s a ete decouvert lors du parcours.

Un dictionnaire couleur. Pour tout sommet s, couleur[s] vaut blanc sile sommet s n’est pas passe dans la file, gris s’il est dans la file, noirlorsqu’il est sorti de la file.

Une liste Q utilisee comme file (fifo) : on enfile un sommet lorsqu’ilest decouvert, on le defile lorsqu’il est termine (traitement prioritairedes sommets decouverts au plus tot).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 30 / 97

Page 49: Parcours d'un graphe

Exemple d’execution

Deroulement attendu du programme, avec l’appel bfs(G,’b’), sur le grapheci-dessous :

PythonG=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’]

a

b

c

d

e f

g

h

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 31 / 97

Page 50: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None}Q=[’b’]Decouverts (gris ou noirs) =[’b’]Fermes (noirs) =[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 32 / 97

Page 51: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’}Q=[’b’,’a’,’d’,’e’]Decouverts =[’b’,’a’,’d’,’e’]Fermes=[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 33 / 97

Page 52: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’}Q=[’a’,’d’,’e’]Decouverts=[’b’,’a’,’d’,’e’]Fermes=[’b’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 34 / 97

Page 53: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’,’c’ :’a’}Q=[’d’,’e’,’c’]Decouverts=[’b’,’a’,’d’,’e’,’c’]Fermes=[’b’,’a’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 35 / 97

Page 54: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’,’c’ :’a’}Q=[’e’,’c’]Decouverts=[’b’,’a’,’d’,’e’,’c’]Fermes=[’b’,’a’,’d’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 36 / 97

Page 55: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’,’c’ :’a’,’f’ :’e’,’g’ :’e’}Q=[’c’,’f’,’g’]Decouverts=[’b’,’a’,’d’,’e’,’c’,’f’,’g’]Fermes=[’b’,’a’,’d’,’e’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 37 / 97

Page 56: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’,’c’ :’a’,’f’ :’e’,’g’ :’e’}Q=[’f’,’g’]Decouverts=[’b’,’a’,’d’,’e’,’c’,’f’,’g’]Fermes=[’b’,’a’,’d’,’e’,’c’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 38 / 97

Page 57: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’,’c’ :’a’,’f’ :’e’,’g’ :’e’}Q=[’g’]Decouverts=[’b’,’a’,’d’,’e’,’c’,’f’,’g’]Fermes=[’b’,’a’,’d’,’e’,’c’,’f’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 39 / 97

Page 58: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’,’c’ :’a’,’f’ :’e’,’g’ :’e’,’h’ :’g’}Q=[’h’]Decouverts=[’b’,’a’,’d’,’e’,’c’,’f’,’g’,’h’]Fermes=[’b’,’a’,’d’,’e’,’c’,’f’,’g’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 40 / 97

Page 59: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ ’b’ : None, ’a’ :’b’, ’d’ :’b’, ’e’ :’b’,’c’ :’a’,’f’ :’e’,’g’ :’e’,’h’ :’g’}Q=[]Decouverts=[’b’,’a’,’d’,’e’,’c’,’f’,’g’,’h’]Fermes=[’b’,’a’,’d’,’e’,’c’,’f’,’g’,’h’]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 41 / 97

Page 60: Parcours d'un graphe

Arborescence associee au parcours

a

b

c

d e

f g

h

L’ordre de parcours est : ligne apres ligne (de la racine vers les feuilles) etde gauche a droite pour une ligne.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 42 / 97

Page 61: Parcours d'un graphe

BFS : un codage en python

Pythondef bfs(G,s) :

couleur=dict()for x in G : couleur[x]=’blanc’P=dict()P[s]=Nonecouleur[s]=’gris’Q=[s]while Q :

u=Q[0]for v in G[u] :

if couleur[v]==’blanc’ :P[v]=ucouleur[v]=’gris’Q.append(v)

Q.pop(0)couleur[u]=’noir’

return P

BFS en python

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 43 / 97

Page 62: Parcours d'un graphe

En ne gardant que l’essentiel

Pythondef bfs(G,s) :

P,Q={s :None},[s]while Q :

u=Q.pop(0)for v in G[u] :

if v in P : continueP[v]=uQ.append(v)

return P

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 44 / 97

Page 63: Parcours d'un graphe

Exercice a rendre 1

Vous donnerez, sur papier, un codage python du graphe ci-dessous suivantle modele precedemment donne puis le deroulement de bfs(G,’b’)correspondant a ce codage :

a

b

c d e

f

g

h i j

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 45 / 97

Page 64: Parcours d'un graphe

Application

Exercice a rendre 2. En utilisant le programme precedent, on definit lafonction suivante :

Pythondef f(G,s,v) :

P=bfs(G,s)ch=[v]while P[v] :

ch.append(P[v])v=P[v]

ch.reverse()return ch

print f(G,’b’,’h’)

Quel est son role ?

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 46 / 97

Page 65: Parcours d'un graphe

Parcours de graphe

Parcours en profondeur

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 47 / 97

Page 66: Parcours d'un graphe

Parcours en profondeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en profondeur, on utilise une pile. On empile lesommet de depart (on visite la page index du site).

2 Si le sommet de la pile presente des voisins qui ne sont pas dans lapile, ni deja passes dans la pile :

alors on selectionne l’un de ces voisins et on l’empile (en le marquantde son numero de decouverte),sinon on depile (c’est a dire on supprime l’element du sommet de lapile).

3 On recommence au point 2 (tant que la pile n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 48 / 97

Page 67: Parcours d'un graphe

Parcours en profondeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en profondeur, on utilise une pile. On empile lesommet de depart (on visite la page index du site).

2 Si le sommet de la pile presente des voisins qui ne sont pas dans lapile, ni deja passes dans la pile :

alors on selectionne l’un de ces voisins et on l’empile (en le marquantde son numero de decouverte),sinon on depile (c’est a dire on supprime l’element du sommet de lapile).

3 On recommence au point 2 (tant que la pile n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 48 / 97

Page 68: Parcours d'un graphe

Parcours en profondeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en profondeur, on utilise une pile. On empile lesommet de depart (on visite la page index du site).

2 Si le sommet de la pile presente des voisins qui ne sont pas dans lapile, ni deja passes dans la pile :

alors on selectionne l’un de ces voisins et on l’empile (en le marquantde son numero de decouverte),sinon on depile (c’est a dire on supprime l’element du sommet de lapile).

3 On recommence au point 2 (tant que la pile n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 48 / 97

Page 69: Parcours d'un graphe

Parcours en profondeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en profondeur, on utilise une pile. On empile lesommet de depart (on visite la page index du site).

2 Si le sommet de la pile presente des voisins qui ne sont pas dans lapile, ni deja passes dans la pile :

alors on selectionne l’un de ces voisins et on l’empile (en le marquantde son numero de decouverte),

sinon on depile (c’est a dire on supprime l’element du sommet de lapile).

3 On recommence au point 2 (tant que la pile n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 48 / 97

Page 70: Parcours d'un graphe

Parcours en profondeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en profondeur, on utilise une pile. On empile lesommet de depart (on visite la page index du site).

2 Si le sommet de la pile presente des voisins qui ne sont pas dans lapile, ni deja passes dans la pile :

alors on selectionne l’un de ces voisins et on l’empile (en le marquantde son numero de decouverte),sinon on depile (c’est a dire on supprime l’element du sommet de lapile).

3 On recommence au point 2 (tant que la pile n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 48 / 97

Page 71: Parcours d'un graphe

Parcours en profondeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en profondeur, on utilise une pile. On empile lesommet de depart (on visite la page index du site).

2 Si le sommet de la pile presente des voisins qui ne sont pas dans lapile, ni deja passes dans la pile :

alors on selectionne l’un de ces voisins et on l’empile (en le marquantde son numero de decouverte),sinon on depile (c’est a dire on supprime l’element du sommet de lapile).

3 On recommence au point 2 (tant que la pile n’est pas vide).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 48 / 97

Page 72: Parcours d'un graphe

Parcours en profondeur : principe de l’algorithme

Vous devez parcourir toutes les pages d’un site web. Les pages sont lessommets d’un graphe et un lien entre deux pages est une arete entre cesdeux sommets.

1 Dans le parcours en profondeur, on utilise une pile. On empile lesommet de depart (on visite la page index du site).

2 Si le sommet de la pile presente des voisins qui ne sont pas dans lapile, ni deja passes dans la pile :

alors on selectionne l’un de ces voisins et on l’empile (en le marquantde son numero de decouverte),sinon on depile (c’est a dire on supprime l’element du sommet de lapile).

3 On recommence au point 2 (tant que la pile n’est pas vide).

En d’autres termes, on traite toujours en priorite les liens des pages lesplus tard decouvertes.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 48 / 97

Page 73: Parcours d'un graphe

Parcours en profondeur d’un arbre

Parcourir en profondeur le graphe ci-dessous a partir du sommet s :s

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 49 / 97

Page 74: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 50 / 97

Page 75: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 51 / 97

Page 76: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 52 / 97

Page 77: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 53 / 97

Page 78: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 54 / 97

Page 79: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 55 / 97

Page 80: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 56 / 97

Page 81: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 57 / 97

Page 82: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 58 / 97

Page 83: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 59 / 97

Page 84: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 60 / 97

Page 85: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 61 / 97

Page 86: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 62 / 97

Page 87: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 63 / 97

Page 88: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 64 / 97

Page 89: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 11

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 65 / 97

Page 90: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 66 / 97

Page 91: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

12

10

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 67 / 97

Page 92: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 68 / 97

Page 93: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 69 / 97

Page 94: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 70 / 97

Page 95: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 71 / 97

Page 96: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 72 / 97

Page 97: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 73 / 97

Page 98: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 74 / 97

Page 99: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 75 / 97

Page 100: Parcours d'un graphe

Parcours en profondeur d’un arbre

1

2

3 4

5 6

7

8 9 10

11

12

13 14 arbre DFS en python

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 76 / 97

Page 101: Parcours d'un graphe

DFS (depth first search) : programmation python

Exercice a rendre 3.Avec la representation d’un graphe par un dictionnaire commeprecedemment, programmer en langage python le DFS avec les variablessuivantes :

Un dictionnaire P. En fin de parcours, pour tout sommet s du grapheP[s] sera le pere de s, c’est a dire le sommet a partir duquel lesommet s a ete decouvert lors du parcours.

Un dictionnaire couleur. Pour tout sommet s, couleur[s] vaut blanc sile sommet s n’est pas encore decouvert, gris s’il est deja decouvertmais non encore ferme (c’est a dire si l’algorithme n’ a pas encoredecouvert tous ses voisins), noir lorsque ce sommet est ferme.

Une liste Q utilisee comme pile (lifo) : on empile un sommet lorsqu’ilest decouvert, on le depile lorsqu’il est termine (traitement prioritairedes sommets decouverts au plus tard).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 77 / 97

Page 102: Parcours d'un graphe

DFS (depth first search) : programmation python

Exercice a rendre 3.Avec la representation d’un graphe par un dictionnaire commeprecedemment, programmer en langage python le DFS avec les variablessuivantes :

Un dictionnaire P. En fin de parcours, pour tout sommet s du grapheP[s] sera le pere de s, c’est a dire le sommet a partir duquel lesommet s a ete decouvert lors du parcours.

Un dictionnaire couleur. Pour tout sommet s, couleur[s] vaut blanc sile sommet s n’est pas encore decouvert, gris s’il est deja decouvertmais non encore ferme (c’est a dire si l’algorithme n’ a pas encoredecouvert tous ses voisins), noir lorsque ce sommet est ferme.

Une liste Q utilisee comme pile (lifo) : on empile un sommet lorsqu’ilest decouvert, on le depile lorsqu’il est termine (traitement prioritairedes sommets decouverts au plus tard).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 77 / 97

Page 103: Parcours d'un graphe

DFS (depth first search) : programmation python

Exercice a rendre 3.Avec la representation d’un graphe par un dictionnaire commeprecedemment, programmer en langage python le DFS avec les variablessuivantes :

Un dictionnaire P. En fin de parcours, pour tout sommet s du grapheP[s] sera le pere de s, c’est a dire le sommet a partir duquel lesommet s a ete decouvert lors du parcours.

Un dictionnaire couleur. Pour tout sommet s, couleur[s] vaut blanc sile sommet s n’est pas encore decouvert, gris s’il est deja decouvertmais non encore ferme (c’est a dire si l’algorithme n’ a pas encoredecouvert tous ses voisins), noir lorsque ce sommet est ferme.

Une liste Q utilisee comme pile (lifo) : on empile un sommet lorsqu’ilest decouvert, on le depile lorsqu’il est termine (traitement prioritairedes sommets decouverts au plus tard).

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 77 / 97

Page 104: Parcours d'un graphe

Exemple d’execution

Deroulement attendu du programme, avec l’appel dfs(G,’g’), sur le grapheci-dessous :

PythonG=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’]

a

b

c

d

e f

g

h

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 78 / 97

Page 105: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h

P={ g : None}Q=[g]Decouverts (gris ou noirs)=[g]Fermes (noirs) =[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 79 / 97

Page 106: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=g, R=[e,f,h],v=e,P={ g : None, e : g}Q=[g,e]Decouverts=[g,e]Fermes=[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 80 / 97

Page 107: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=e, R=[b,d,f],v=b,P={ g : None, e : g,b : e}Q=[g,e,b]Decouverts=[g,e,b]Fermes=[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 81 / 97

Page 108: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=b, R=[a,d],v=a,P={ g : None, e : g,b : e, a :b}Q=[g,e,b,a]Decouverts=[g,e,b,a]Fermes=[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 82 / 97

Page 109: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=a, R=[c],v=c,P={ g : None, e : g,b : e, a :b,c :a}Q=[g,e,b,a,c]Decouverts=[g,e,b,a,c]Fermes=[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 83 / 97

Page 110: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=c, R=[d],v=d,P={ g : None, e : g,b : e, a :b,c :a, d :c}Q=[g,e,b,a,c,d]Decouverts=[g,e,b,a,c,d]Fermes=[]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 84 / 97

Page 111: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=d, R=[],P={ g : None, e : g,b : e, a :b,c :a, d :c}Q=[g,e,b,a,c]Decouverts=[g,e,b,a,c,d]Fermes=[d]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 85 / 97

Page 112: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=c, R=[],P={ g : None, e : g,b : e, a :b,c :a, d :c}Q=[g,e,b,a]Decouverts=[g,e,b,a,c,d]Fermes=[d,c]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 86 / 97

Page 113: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=a, R=[],P={ g : None, e : g,b : e, a :b,c :a, d :c}Q=[g,e,b]Decouverts=[g,e,b,a,c,d]Fermes=[d,c,a]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 87 / 97

Page 114: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=b, R=[],P={ g : None, e : g,b : e, a :b,c :a, d :c}Q=[g,e]Decouverts=[g,e,b,a,c,d]Fermes=[d,c,a,b]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 88 / 97

Page 115: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=e, R=[f], v=f,P={ g : None, e : g,b : e, a :b,c :a, d :c,f :e}Q=[g,e,f]Decouverts=[g,e,b,a,c,d,f]Fermes=[d,c,a,b]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 89 / 97

Page 116: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=f, R=[],P={ g : None, e : g,b : e, a :b,c :a, d :c,f :e}Q=[g,e]Decouverts=[g,e,b,a,c,d,f]Fermes=[d,c,a,b,f]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 90 / 97

Page 117: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=e, R=[],P={ g : None, e : g,b : e, a :b,c :a, d :c,f :e}Q=[g]Decouverts=[g,e,b,a,c,d,f]Fermes=[d,c,a,b,f,e]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 91 / 97

Page 118: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

h u=g, R=[h], v=h,P={ g : None, e : g,b : e, a :b,c :a, d :c,f :e,h :g}Q=[g,h]Decouverts=[g,e,b,a,c,d,f,h]Fermes=[d,c,a,b,f,e]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 92 / 97

Page 119: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

hu=h, R=[],

P={ g : None, e : g,b : e, a :b,c :a, d :c,f :e,h :g}Q=[g]Decouverts=[g,e,b,a,c,d,f,h]Fermes=[d,c,a,b,f,e,h]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 93 / 97

Page 120: Parcours d'un graphe

Deroulement

a

b

c

d

e f

g

hu=g, R=[],

P={ g : None, e : g,b : e, a :b,c :a, d :c,f :e,h :g}Q=[ ]Decouverts=[g,e,b,a,c,d,f,h]Fermes=[d,c,a,b,f,e,h,g]

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 94 / 97

Page 121: Parcours d'un graphe

Arborescence associee au parcours

a

b

c

d

e

f

g

h

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 95 / 97

Page 122: Parcours d'un graphe

tri topologique

Exemple d’application du parcours en profondeur.Debut d’annee, vos enseignants preparent le cours d’ISN.Pour cela, ils decoupent les notions en chapitres a, b, c, d. . .Sur le graphe ci-dessous, une fleche du chapitre x vers le chapitre y signifieque x doit etre traite avant y.

a b c

de

f

g

h

i

j k

Pour une meilleure organisation et savoir ou commencer , on aimeraitreorganiser la representation du graphe de facon a ce que tous les sommetssoient dessines alignes, toutes les fleches du schema devant etre orienteesvers la droite.

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 96 / 97

Page 123: Parcours d'un graphe

tri topologique

L’enumeration des sommets du graphe en ordre inverse de leur date defermeture dans l’algorithme de parcours en profondeur permet d’obtenir unordre des sommets satisfaisant la demande.

Pythondef lancement(G) :

for s in G :if couleur[s]==’blanc’ : parcours(G,s)

def parcours(G,s) :couleur[s]=’gris’for v in G[s] :

if couleur[v]==’blanc’ : parcours(G,v)P.append(s)

# # # # # #couleur=dict()for v in G :couleur[v]=’blanc’P=list()lancement(G)P.reverse()print P

tri topo python

Jean-Manuel Meny – IREM de LYON () Algorithmique ISN 2013 97 / 97