La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Module 4 : Parcours dans un graphe. 12/7/2006Parcours dans un graphe2 Plan du module Parcours en profondeur Parcours en largeur Composantes connexes Recherche.

Présentations similaires


Présentation au sujet: "Module 4 : Parcours dans un graphe. 12/7/2006Parcours dans un graphe2 Plan du module Parcours en profondeur Parcours en largeur Composantes connexes Recherche."— Transcription de la présentation:

1 Module 4 : Parcours dans un graphe

2 12/7/2006Parcours dans un graphe2 Plan du module Parcours en profondeur Parcours en largeur Composantes connexes Recherche de cycles Tri topologique Bi-coloriage dun graphe

3 12/7/2006Parcours dans un graphe3 Parcours en profondeur Utilise lidée du backtracking Recherche exhaustive de toutes les possibilités si possible Retour en arrière (backtrack) sil ny a plus de possibilité davancement non explorée

4 12/7/2006Parcours dans un graphe4 Parcours en profondeur 1. Marquer tous les nœuds comme « non visités » 2. Choisir le nœud de départ et le marquer comme visité 3. À partir de là, effectuer un chemin vers le bas aussi long que possible en ne traitant que les nœuds non encore « visités » (parcours récursif) 4. Si tous les nœuds ne sont pas encore « visités », choisir un autre nœud « non visité » et recommencer à 3.

5 12/7/2006Parcours dans un graphe5 Parcours en profondeur 1/ u v w x y z

6 12/7/2006Parcours dans un graphe6 Exemple (DFS) 1/ 2/ u v w x y z

7 12/7/2006Parcours dans un graphe7 Exemple (DFS) 1/ 3/ 2/ u v w x y z

8 12/7/2006Parcours dans un graphe8 Exemple (DFS) 1/ 4/ 3/ 2/ u v w x y z

9 12/7/2006Parcours dans un graphe9 Exemple (DFS) 1/ 4/ 3/ 2/ u v w x y z

10 12/7/2006Parcours dans un graphe10 Exemple (DFS) 1/ 4/5 3/ 2/ u v w x y z

11 12/7/2006Parcours dans un graphe11 Exemple (DFS) 1/ 4/5 3/6 2/ u v w x y z

12 12/7/2006Parcours dans un graphe12 Exemple (DFS) 1/ 4/5 3/6 2/7 u v w x y z

13 12/7/2006Parcours dans un graphe13 Exemple (DFS) 1/ 4/5 3/6 2/7 u v w x y z

14 12/7/2006Parcours dans un graphe14 Exemple (DFS) 1/8 4/5 3/6 2/7 u v w x y z

15 12/7/2006Parcours dans un graphe15 Exemple (DFS) 1/8 4/5 3/6 2/7 9/ u v w x y z

16 12/7/2006Parcours dans un graphe16 Exemple (DFS) 1/8 4/5 3/6 2/7 9/ u v w x y z

17 12/7/2006Parcours dans un graphe17 Exemple (DFS) 1/8 4/5 3/6 10/ 2/7 9/ u v w x y z

18 12/7/2006Parcours dans un graphe18 Exemple (DFS) 1/8 4/5 3/6 10/ 2/7 9/ u v w x y z

19 12/7/2006Parcours dans un graphe19 Exemple (DFS) 1/8 4/5 3/6 10/11 2/7 9/ u v w x y z

20 12/7/2006Parcours dans un graphe20 Exemple (DFS) 1/8 4/5 3/6 10/11 2/7 9/12 u v w x y z

21 12/7/2006Parcours dans un graphe21 Parcours en profondeur PROCEDURE dfs(VAR g : graph; v : integer); BEGIN IF NOT finished THEN BEGIN discovered[v] := true; process_vertex(v); FOR i := 0 TO g.degree[v]-1 DO BEGIN y := g.edges[v][i]; IF NOT discovered[y] THEN BEGIN dfs(g,y) END ELSE IF NOT processed[y] THEN process_edge(v,y); IF finished THEN exit END; processed[v] := true END END; Extrait partiel du programme Pascal

22 12/7/2006Parcours dans un graphe22 Parcours en largeur 1. Marquer tous les nœuds comme « non visités » 2. Choisir un nœud v de départ et le marquer « visité » 3. À partir de v: a) Visiter tous les nœuds non encore visités adjacents à v b) Visiter tous les nœuds accessibles depuis v en suivant 2 arêtes c) Visiter tous les nœuds accessibles depuis v en suivant n arêtes En utilisant une file ! 4. Si tous les nœuds nont pas encore été visités, choisir un nœud non encore visité et recommencer à 3.

23 12/7/2006Parcours dans un graphe23 Parcours en largeur Placer le nœud de départ dans la file Tant que la file nest pas vide soit n le premier nœud de la file traiter n enlever n de la file placer tous les nœuds adjacents à n et non encore traités dans la file Fin tant que

24 12/7/2006Parcours dans un graphe24 Parcours en largeur Une file est une structure de données de type FIFO (First In First Out) Enqueue(x,q) insère litem x à la fin de q Dequeue(q) renvoie et enlève litem en tête de la file Empty(q) indique si la file est pleine, ne peut plus accepter dajouts Initialize_queue(q) crée une file vide

25 12/7/2006Parcours dans un graphe25 Parcours en largeur 0 r s t u v w x y Q: s 0

26 12/7/2006Parcours dans un graphe26 Exemple (BFS) r s t u v w x y Q: w r 1 1

27 12/7/2006Parcours dans un graphe27 Exemple (BFS) r s t u v w x y Q: r t x 1 2 2

28 12/7/2006Parcours dans un graphe28 Exemple (BFS) r s t u v w x y Q: t x v 2 2 2

29 12/7/2006Parcours dans un graphe29 Exemple (BFS) r s t u v w x y Q: x v u 2 2 3

30 12/7/2006Parcours dans un graphe30 Exemple (BFS) r s t u v w x y Q: v u y 2 3 3

31 12/7/2006Parcours dans un graphe31 Exemple (BFS) r s t u v w x y Q: u y 3 3

32 12/7/2006Parcours dans un graphe32 Exemple (BFS) r s t u v w x y Q: y 3

33 12/7/2006Parcours dans un graphe33 Exemple (BFS) r s t u v w x y Q:

34 12/7/2006Parcours dans un graphe34 Exemple (BFS) r s t u v w x y BF Tree

35 12/7/2006Parcours dans un graphe35 Parcours en largeur PROCEDURE bfs(VAR g : graph; start : integer); VAR q : queue; { queue of vertices to visit } BEGIN FOR i := 0 TO g.nvertices-1 DO BEGIN processed[i] := false; discovered[i] := false; END; init_queue(q); enqueue(q, start); discovered[start] := true; WHILE NOT empty(q) DO BEGIN v := dequeue(q); process_vertex(v); processed[v] := true; FOR i := 0 TO g.degree[v]-1 DO BEGIN IF NOT discovered[g.edges[v][i]] THEN BEGIN enqueue(q,g.edges[v][i]); discovered[g.edges[v][i]] := true; END; IF NOT processed[g.edges[v][i]] THEN process_edge(v,g.edges[v][i]) END END; Extrait partiel du programme Pascal

36 12/7/2006Parcours dans un graphe36 Définitions Chemin (de longueur n): Une séquence de nœuds v 0, v 1, …, v n avec une arête de v i à v i+1 pour chaque 0 <= i < n. Un chemin est simple si tous les nœuds dans le chemin sont distincts. Un cycle est un chemin de longueur 1 ou plus reliant un nœud v i à lui même. Un cycle est simple si le chemin est simple, sauf que les premiers et derniers nœuds sont les même.

37 12/7/2006Parcours dans un graphe37 Composantes connexes Une composante connexe dun graphe non orienté est lensemble maximal de nœuds tel quil existe un chemin entre toutes les paires de nœuds de cet ensemble Elles se déterminent par un parcours (ici DFS)

38 12/7/2006Parcours dans un graphe38 Composantes connexes c := 0; FOR i := 0 TO g.nvertices-1 DO IF NOT discovered[i] THEN BEGIN c := c+1; write('Component ',c,': '); dfs(g,i); writeln END

39 12/7/2006Parcours dans un graphe39 Recherche de cycles Une arête arrière (u,v) est telle que v est un père de u dans larbre DFS construit pour un graphe. Toute arête arrière allant de u vers son père v crée un cycle dans le chemin de v à u.

40 12/7/2006Parcours dans un graphe40 Recherche de cycles PROCEDURE process_edge(x,y : integer); BEGIN IF parent[x] <> y THEN BEGIN write('Cycle from ',y, ' to ', x, ' : '); find_path(y,x); writeln { finished := true} END

41 12/7/2006Parcours dans un graphe41 Recherche de cycles PROCEDURE find_path(start, endv : integer); BEGIN IF (start = endv) OR (endv = -1) THEN write(start:3) ELSE BEGIN find_path(start, parent[endv]); write(endv:3) END END;

42 12/7/2006Parcours dans un graphe42 Tri topologique Le tri topologique d'un graphe orienté sans circuit est une numérotation des sommets dans laquelle les descendants d'un sommet de numéro k sont nécessairement de numéro supérieur à k.

43 12/7/2006Parcours dans un graphe43 Topological Sort: DFS F C G A B D E H Un ordre topologique: C G B A D E F H

44 12/7/2006Parcours dans un graphe44 Tri topologique Soit le graphe orienté acyclique suivant

45 12/7/2006Parcours dans un graphe45 Tri topologique La table indique pour chacun des nœuds (1 à 6) le nombre darêtes entrantes (indegree)

46 12/7/2006Parcours dans un graphe46 Tri topologique file

47 12/7/2006Parcours dans un graphe47 Tri topologique La valeur en tête de file est enlevée (ici 1). La valeur indegree de chaque nœud adjacent au nœud enlevé de la file est décrémentée de 1. Le(s) nœud(s) dont lindegree passe à 0 sont mis dans la file (ici 2).

48 12/7/2006Parcours dans un graphe48 Tri topologique file Résultat 1

49 12/7/2006Parcours dans un graphe49 Tri topologique file Résultat 1, 6

50 12/7/2006Parcours dans un graphe50 Tri topologique file Résultat 1, 6, 2

51 12/7/2006Parcours dans un graphe51 Tri topologique file Résultat 1, 6, 2, 5

52 12/7/2006Parcours dans un graphe52 Tri topologique file Résultat 1, 6, 2, 5, 3

53 12/7/2006Parcours dans un graphe53 Tri topologique file Résultat 1, 6, 2, 5, 3, 4

54 12/7/2006Parcours dans un graphe54 Tri topologique La file est vide est le résultat du tri topologique est 1, 6, 2, 5, 3, 4

55 12/7/2006Parcours dans un graphe55 Tri topologique compute_indegrees(g, indegree); init_queue(zeroin); FOR i := 0 TO g.nvertices-1 DO IF indegree[i]=0 THEN enqueue(zeroin,i); j := 0; WHILE NOT empty(zeroin) DO BEGIN x := dequeue(zeroin); sorted[j] := x; j := j+1; FOR i := 0 TO g.degree[x]-1 DO BEGIN y := g.edges[x][i]; indegree[y] := indegree[y] - 1; IF indegree[y] = 0 THEN enqueue(zeroin,y) END END; Extrait partiel du programme Pascal

56 12/7/2006Parcours dans un graphe56 Bi-coloriage dun graphe Énoncé: Réalisez un programme Pascal qui indique sil est possible de repeindre n gares dun réseau ferré de manière à ce que deux gares reliées directement ne soient jamais peintes de la même couleur. On ne dispose que de deux couleurs.

57 12/7/2006Parcours dans un graphe57 Bi-coloriage dun graphe In 1976 the ``Four Color Map Theorem" was proven with the assistance of a computer. This theorem states that every map can be colored using only four colors, in such a way that no region is colored using the same color as a neighbor region. Here you are asked to solve a simpler similar problem. You have to decide whether a given arbitrary connected graph can be bicolored. That is, if one can assign colors (from a palette of two) to the nodes in such a way that no two adjacent nodes have the same color. To simplify the problem you can assume: no node will have an edge to itself. the graph is nondirected. That is, if a node a is said to be connected to a node b, then you must assume that b is connected to a. the graph will be strongly connected. That is, there will be at least one path from any node to any other node.

58 12/7/2006Parcours dans un graphe58 Bi-coloriage dun graphe Input The input consists of several test cases. Each test case starts with a line containing the number n ( 1 < n < 200) of different nodes. The second line contains the number of edges l. After this, l lines will follow, each containing two numbers that specify an edge between the two nodes that they represent. A node in the graph will be labeled using a number a (0a

59 12/7/2006Parcours dans un graphe59 Bi-coloriage dun graphe Sample Input Sample Output NOT BICOLORABLE. BICOLORABLE.

60 12/7/2006Parcours dans un graphe60 Bi-coloriage dun graphe Problème


Télécharger ppt "Module 4 : Parcours dans un graphe. 12/7/2006Parcours dans un graphe2 Plan du module Parcours en profondeur Parcours en largeur Composantes connexes Recherche."

Présentations similaires


Annonces Google