Traversarea grafurilor Aplicaii Structuri de date i algoritmi













- Slides: 13
Traversarea grafurilor. Aplicaţii Structuri de date şi algoritmi -laborators. l. dr. ing. Ciprian-Bogdan Chirila Universitatea Politehnica Timişoara 2014
Cuprins • Traversarea grafurilor – Traversarea grafurilor în adâncime – Traversarea grafurilor prin cuprindere • Aplicaţii ale traversării grafurilor – Determinarea arborilor de acoperire – Determinarea componentelor conexe – Puncte de articulaţie şi componte biconexe • Aplicaţie – L’ami de mon ami c’est mon ami
Traversarea grafurilor în adâncime (depth-first search) 2 3 b c 1 a 4 d g 7 f 6 e 5
TDA graf const Max. Nod=100; typedef Nod=record cheie: integer; vizitat: boolean; end; typedef Graf=record n: integer; noduri: array[1. . Max. Nod] of Nod; arc: array[1. . Max. Nod, 1. . Max. Nod] of boolean; end;
Căutare în adâncime -algoritmprocedure Cautare. In. Adancime(g: Graf; x: Nod); var y: Nod; begin x. vizitat: =true; for *fiecare nod y adiacent lui x do if not y. vizitat then Cautare. In. Adancime(g, y); end; procedure Traversare. In. Adancime(g: Graf); var x: Nod; begin for *fiecare nod x din g do x. vizitat: =false; for *fiecare nod x din g do if not x. vizitat then Cautare. In. Adancime(g, x); end;
Traversarea grafurilor prin cuprindere (breadth-first search) 2 3 b c 1 a 5 d g 4 f 7 e 6
Căutare prin cuprindere -algoritmprocedure Cautare. Prin. Cuprindere(g: Graf; x: Nod); var Q: Coada. Noduri; begin adauga(x, Q); repeat x: =scoate(Q); x. vizitat: =true; for *fiecare nod y adiacent lui x do if not y. vizitat then begin y. vizitat: =true; adauga(y, Q); end; until vid(Q); end; procedure Traversare. Prin. Cuprindere(g: Graf); var x: Nod; begin for *fiecare nod x din g do x. vizitat: =false; for *fiecare nod x din g do if not x. vizitat then Cautare. Prin. Cuprindere(g, x); end;
Determinarea arborilor de acoperire (traversare în adâncime) b c a d g f e
Determinarea arborilor de acoperire (traversare prin cuprindere) b c a d g f e
Determinarea componentelor conexe procedure Cautare. In. Adancime(g: Graf; x: Nod); var y: Nod; begin x. vizitat: =true; write(x. cheie); for *fiecare nod y adiacent lui x do if not y. vizitat then Cautare. In. Adancime(g, y); end; cod de delimitare între două componente conexe procedure Traversare. In. Adancime(g: Graf); var x: Nod; begin for *fiecare nod x din g do x. vizitat: =false; for *fiecare nod x din g do if not x. vizitat then begin writeln; Cautare. In. Adancime(g, x); end;
Puncte de articulaţie şi componente biconexe b c a d g f punct de articulaţie e
Puncte de articulaţie şi componente biconexe (2) b c a d g f componentă biconexă e
Aplicaţie L’ ami de mon ami c’est mon ami. Pierre Adeline Philippe Roxanne Serge Robert Bertrand Iniţial Adeline Philippe Roxanne Serge Robert Bertrand Final