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

Présentations similaires


Présentation au sujet: "Module 4 : Parcours dans un graphe"— Transcription de la présentation:

1 Module 4 : Parcours dans un graphe

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

3 Parcours en profondeur
Utilise l’idée du backtracking Recherche exhaustive de toutes les possibilités si possible Retour en arrière (backtrack) s’il n’y a plus de possibilité d’avancement non explorée 12/7/2006 Parcours dans un graphe

4 Parcours en profondeur
Marquer tous les nœuds comme « non visités » Choisir le nœud de départ et le marquer comme visité À 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) Si tous les nœuds ne sont pas encore « visités », choisir un autre nœud « non visité » et recommencer à 3. 12/7/2006 Parcours dans un graphe

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

21 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 y := g.edges[v][i]; IF NOT discovered[y] dfs(g,y) END ELSE IF NOT processed[y] THEN process_edge(v,y); IF finished THEN exit END; processed[v] := true Extrait partiel du programme Pascal 12/7/2006 Parcours dans un graphe

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

23 Parcours dans un graphe
Parcours en largeur Placer le nœud de départ dans la file Tant que la file n’est 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 12/7/2006 Parcours dans un graphe

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

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

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

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

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

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

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

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

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

33 Parcours dans un graphe
Exemple (BFS) r s t u 1 2 3 2 1 2 3 v w x y Q:  12/7/2006 Parcours dans un graphe

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

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

36 Parcours dans un graphe
Définitions Chemin (de longueur n): Une séquence de nœuds v0, v1, …, vn avec une arête de vi à vi+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 vi à lui même. Un cycle est simple si le chemin est simple, sauf que les premiers et derniers nœuds sont les même. 12/7/2006 Parcours dans un graphe

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

38 Parcours dans un graphe
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 12/7/2006 Parcours dans un graphe

39 Parcours dans un graphe
Recherche de cycles Une arête arrière (u,v) est telle que v est un père de u dans l’arbre 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. 12/7/2006 Parcours dans un graphe

40 Parcours dans un graphe
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 12/7/2006 Parcours dans un graphe

41 Parcours dans un graphe
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; 12/7/2006 Parcours dans un graphe

42 Parcours dans un graphe
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. 12/7/2006 Parcours dans un graphe

43 Parcours dans un graphe
Topological Sort: DFS 1 C 2 4 3 G A B 5 D E 6 7 F 8 Un ordre topologique: C G B A D E F H H 12/7/2006 Parcours dans un graphe

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

45 Parcours dans un graphe
Tri topologique La table indique pour chacun des nœuds (1 à 6) le nombre d’arêtes entrantes (indegree) 1 2 3 4 5 6 12/7/2006 Parcours dans un graphe

46 Parcours dans un graphe
Tri topologique 1 2 3 4 5 6 file 1 6 12/7/2006 Parcours dans un graphe

47 Parcours dans un graphe
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 l’indegree passe à 0 sont mis dans la file (ici 2). 12/7/2006 Parcours dans un graphe

48 Parcours dans un graphe
Tri topologique 1 2 3 4 5 6 file Résultat 1 6 2 12/7/2006 Parcours dans un graphe

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

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

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

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

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

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

55 Parcours dans un graphe
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 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 12/7/2006 Parcours dans un graphe

56 Bi-coloriage d’un graphe
Énoncé: Réalisez un programme Pascal qui indique s’il est possible de repeindre n gares d’un 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. 12/7/2006 Parcours dans un graphe

57 Bi-coloriage d’un 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. 12/7/2006 Parcours dans un graphe

58 Bi-coloriage d’un 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 (0≤a<n). An input with n = 0 will mark the end of the input and is not to be processed. Output  You have to decide whether the input graph can be bicolored or not, and print it as shown below. 12/7/2006 Parcours dans un graphe

59 Bi-coloriage d’un graphe
Sample Input  3 0 1 1 2 2 0 9 8 0 2 0 3 0 4 0 5 0 6 0 7 0 8 Sample Output  NOT BICOLORABLE. BICOLORABLE. 12/7/2006 Parcours dans un graphe

60 Bi-coloriage d’un graphe
Problème 10004 12/7/2006 Parcours dans un graphe


Télécharger ppt "Module 4 : Parcours dans un graphe"

Présentations similaires


Annonces Google