Module 4 : Parcours dans un graphe - PowerPoint PPT Presentation

About This Presentation
Title:

Module 4 : Parcours dans un graphe

Description:

Title: Module 1 : Complexit Author: Pierre Mousel Last modified by: Nino Created Date: 6/22/2006 3:31:18 PM Document presentation format: On-screen Show – PowerPoint PPT presentation

Number of Views:57
Avg rating:3.0/5.0
Slides: 61
Provided by: PierreM160
Category:

less

Transcript and Presenter's Notes

Title: Module 4 : Parcours dans un graphe


1
Module 4 Parcours dans un graphe
2
Plan du module
  • Parcours en profondeur
  • Parcours en largeur
  • Composantes connexes
  • Recherche de cycles
  • Tri topologique
  • Bi-coloriage dun graphe

3
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
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
Parcours en profondeur
u
v
w
1/
x
y
z
6
Exemple (DFS)
u
v
w
2/
1/
x
y
z
7
Exemple (DFS)
u
v
w
2/
1/
3/
x
y
z
8
Exemple (DFS)
u
v
w
2/
1/
4/
3/
x
y
z
9
Exemple (DFS)
u
v
w
2/
1/
4/
3/
x
y
z
10
Exemple (DFS)
u
v
w
2/
1/
4/5
3/
x
y
z
11
Exemple (DFS)
u
v
w
2/
1/
4/5
3/6
x
y
z
12
Exemple (DFS)
u
v
w
2/7
1/
4/5
3/6
x
y
z
13
Exemple (DFS)
u
v
w
2/7
1/
4/5
3/6
x
y
z
14
Exemple (DFS)
u
v
w
2/7
1/8
4/5
3/6
x
y
z
15
Exemple (DFS)
u
v
w
2/7
9/
1/8
4/5
3/6
x
y
z
16
Exemple (DFS)
u
v
w
2/7
9/
1/8
4/5
3/6
x
y
z
17
Exemple (DFS)
u
v
w
2/7
9/
1/8
4/5
3/6
10/
x
y
z
18
Exemple (DFS)
u
v
w
2/7
9/
1/8
4/5
3/6
10/
x
y
z
19
Exemple (DFS)
u
v
w
2/7
9/
1/8
4/5
3/6
10/11
x
y
z
20
Exemple (DFS)
u
v
w
2/7
9/12
1/8
4/5
3/6
10/11
x
y
z
21
Parcours en profondeur
  • PROCEDURE dfs(VAR g graph v integer)
  • BEGIN
  • IF NOT finished
  • THEN BEGIN
  • discoveredv true
  • process_vertex(v)
  • FOR i 0 TO g.degreev-1 DO
  • BEGIN
  • y g.edgesvi
  • IF NOT discoveredy
  • THEN BEGIN
  • dfs(g,y)
  • END
  • ELSE IF NOT processedy THEN
    process_edge(v,y)
  • IF finished THEN exit
  • END
  • processedv true
  • END
  • END

Extrait partiel du programme Pascal
22
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 nont pas encore été visités,
    choisir un nœud non encore visité et recommencer
    à 3.

23
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
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
Parcours en largeur
r
s
t
u
?
?
?
0
?
?
?
?
v
w
x
y
Q s 0
26
Exemple (BFS)
r
s
t
u
?
?
1
0
?
?
?
1
v
w
x
y
Q w r 1 1
27
Exemple (BFS)
r
s
t
u
2
?
1
0
2
?
?
1
v
w
x
y
Q r t x 1 2 2
28
Exemple (BFS)
r
s
t
u
2
?
1
0
2
?
1
2
v
w
x
y
Q t x v 2 2 2
29
Exemple (BFS)
r
s
t
u
2
1
0
3
2
?
1
2
v
w
x
y
Q x v u 2 2 3
30
Exemple (BFS)
r
s
t
u
2
1
0
3
2
3
1
2
v
w
x
y
Q v u y 2 3 3
31
Exemple (BFS)
r
s
t
u
2
1
0
3
2
3
1
2
v
w
x
y
Q u y 3 3
32
Exemple (BFS)
r
s
t
u
2
1
0
3
2
3
1
2
v
w
x
y
Q y 3
33
Exemple (BFS)
r
s
t
u
2
1
0
3
2
3
1
2
v
w
x
y
Q ?
34
Exemple (BFS)
r
s
t
u
2
1
0
3
2
3
1
2
v
w
x
y
BF Tree
35
Parcours en largeur
  • WHILE NOT empty(q) DO
  • BEGIN
  • v dequeue(q)
  • process_vertex(v)
  • processedv true
  • FOR i 0 TO g.degreev-1 DO
  • BEGIN
  • IF NOT discoveredg.edgesvi
  • THEN BEGIN
  • enqueue(q,g.edgesvi)
  • discoveredg.edgesvi true
  • END
  • IF NOT processedg.edgesvi
  • THEN process_edge(v,g.edgesvi)
  • END
  • END
  • 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
  • BEGIN
  • processedi false discoveredi
    false
  • END
  • init_queue(q)
  • enqueue(q, start)
  • discoveredstart true

Extrait partiel du programme Pascal
36
Définitions
  • Chemin (de longueur n) Une séquence de nœuds v0,
    v1, , vn avec une arête de vi à vi1 pour
    chaque 0 lt i lt 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.

37
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
Composantes connexes
  • c 0
  • FOR i 0 TO g.nvertices-1 DO
  • IF NOT discoveredi
  • THEN BEGIN
  • c c1
  • write('Component ',c,' ')
  • dfs(g,i)
  • writeln
  • END

39
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
Recherche de cycles
  • PROCEDURE process_edge(x,y integer)
  • BEGIN
  • IF parentx ltgt y
  • THEN BEGIN
  • write('Cycle from ',y, ' to ', x, ' ')
  • find_path(y,x)
  • writeln
  • finished true
  • END
  • END

41
Recherche de cycles
  • PROCEDURE find_path(start, endv integer)
  • BEGIN
  • IF (start endv) OR (endv -1)
  • THEN write(start3)
  • ELSE BEGIN
  • find_path(start, parentendv)
  • write(endv3)
  • END
  • END

42
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
Topological Sort DFS
C
1
3
2
4
G
A
B
5
D
E
6
7
F
8
Un ordre topologique C G B A D E F H
H
44
Tri topologique
  • Soit le graphe orienté acyclique suivant

45
Tri topologique
  • La table indique pour chacun des nœuds (1 à 6) le
    nombre darêtes entrantes (indegree)

1 0
2 1
3 3
4 3
5 2
6 0
46
Tri topologique
1 0
2 1
3 3
4 3
5 2
6 0
file
1 6
47
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
Tri topologique
1 0
2 0
3 3
4 2
5 2
6 0
file
Résultat 1
6 2
49
Tri topologique
1 0
2 0
3 2
4 2
5 1
6 0
file
Résultat 1, 6
2
50
Tri topologique
1 0
2 0
3 1
4 1
5 0
6 0
file
Résultat 1, 6, 2
5
51
Tri topologique
1 0
2 0
3 0
4 1
5 0
6 0
file
Résultat 1, 6, 2, 5
3
52
Tri topologique
1 0
2 0
3 0
4 0
5 0
6 0
file
Résultat 1, 6, 2, 5, 3
4
53
Tri topologique
1 0
2 0
3 0
4 0
5 0
6 0
file
Résultat 1, 6, 2, 5, 3, 4

54
Tri topologique
  • La file est vide est le résultat du tri
    topologique est 1, 6, 2, 5, 3, 4

55
Tri topologique
  • compute_indegrees(g, indegree)
  • init_queue(zeroin)
  • FOR i 0 TO g.nvertices-1 DO IF indegreei0
    THEN enqueue(zeroin,i)
  • j 0
  • WHILE NOT empty(zeroin) DO
  • BEGIN
  • x dequeue(zeroin)
  • sortedj x
  • j j1
  • FOR i 0 TO g.degreex-1 DO
  • BEGIN
  • y g.edgesxi
  • indegreey indegreey - 1
  • IF indegreey 0 THEN enqueue(zeroin,y)
  • END
  • END

Extrait partiel du programme Pascal
56
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
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
Bi-coloriage dun graphe
  • Input 
  • The input consists of several test cases. Each
    test case starts with a line containing the
    number n ( 1 lt n lt 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 (0altn).
  • 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.

59
Bi-coloriage dun graphe
  • Sample Input 
  • 3
  • 3
  • 0 1
  • 1 2
  • 2 0
  • 9
  • 8
  • 0 1
  • 0 2
  • 0 3
  • 0 4
  • 0 5
  • 0 6
  • 0 7
  • 0 8
  • 0
  • Sample Output 
  • NOT BICOLORABLE.

60
Bi-coloriage dun graphe
  • Problème 10004
  • http//online-judge.uva.es/problemset/
Write a Comment
User Comments (0)
About PowerShow.com