Documente Academic
Documente Profesional
Documente Cultură
Noiembrie 2013
Cuprins
Introducere .............................................................................................................. 3
Reprezentarea Grafurilor n memorie ..................................................... 3
Reprezentarea prin Matrice de Adiacen ................................................. 3
Reprezentarea prin Liste de Adiacen ....................................................... 4
Reprezentarea prin Lista Muchiilor / Arcelor.......................................... 5
Conexitate ................................................................................................................ 8
Tare - Conexitate ................................................................................................. 9
Grafuri hamiltoniene ....................................................................................... 10
Grafuri euleriene ............................................................................................... 11
Aplicaii ................................................................................................................... 12
Legturi ................................................................................................................... 12
Bibliografie............................................................................................................ 12
Introducere
(cteva noiuni elementare)
Un graf (orientat sau neorientat) este o pereche ordonat de mulimi
= (, ).
Mulimea este o mulime nevid i finit de elemente denumite vrfurile grafului.
Mulimea este o mulime de perechi de vrfuri din graf. n cazul grafurilor orientate,
perechile de vrfuri din mulimea sunt ordonate i sunt denumite arce. n cazul grafurilor
neorientate, perechile de vrfuri din mulimea sunt neordonate i sunt denumite muchii.
Perechea ordonat format din vrfurile i se noteaz (, ); vrful se numete
extremitate iniial a arcului (, ), iar vrful se numete extremitate final a arcului (, ).
Perechea neordonat format din vrfurile i se noteaz [, ]; vrfurile i se
numesc extremitile muchiei [, ].
Dac exist un arc sau o muchie cu extremitile i , atunci vrfurile i sunt
adiacente; fiecare extremitate a unei muchii / unui arc este considerat inciden cu muchia /
arcul respectiv.
0
1
1
1
1
0
0
0
1
0
0
1
1
0
1
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
Observaii
Matricea de adiacen a unui graf neorientat este simetric fa de diagonala
principal, n timp ce matricea de adiacen a unui graf orientat nu este simetric fa de
diagonala principal.
Dimensiunea spaiului de memorie necesar pentru reprezentarea unui graf prin
matrice de adiacen este (2 ).
Implementare
Metoda clasic prin declararea i folosirea unei matrici de dimensiunea
.
2 3 4
1
1 4
3 1
1
1
2
3
4
1
1 4
1
Implementare
Cu vectori clasici fiecare list de adiacen este reprezentat ca un vector cu
maxim componente n care vrfurile sunt memorate pe poziii consecutive
Cu liste nlnuite fiecare list de adiacen este reprezentat ca o list
nlnuit; se reine pentru fiecare element al listei adresa spre urmtorul element precum i
informaia util
Cu vectori din STL fiecare list de adiacen este reprezentat ca un vector din
STL ().
1 1 1 3 2
2 3 4 4 3
2 3 3 4 4
1 1 4 3 1
Implementare
Cu reprezentarea unei muchii / unui arc printr-o structur cu dou cmpuri; Se
va folosi un singur vector de lungime cu elemente de tip structur; Vectorul poate fi declarat
static, dinamic sau ca vector din STL ()
Prin folosirea a doi vectori de lungime (sau a unei matrice cu dou linii i
coloane); Vectorii / Matricea pot fi definii static, dinamic sau ca vectori din STL ().
Grafuri ponderate
n numeroase situaii practice modelate cu ajutorul grafurilor, fiecare muchie / arc a / al
grafului are asociat un anumit cost sau o anumit pondere (de exemplu, lungimea cablului
necesar pentru conectarea a dou calculatoare ntr-o reea, costul de transport pe o anumit rut,
profitul obinut dintr-o anumit tranzacie etc.).
Graful = (, ) (orientat sau neorientat) nsoit de o funcie : , prin care se
asociaz fiecrei muchii / arc din graf un numr real se numete graf ponderat.
Pentru a reprezenta un graf ponderat trebuie s reinem i costurile asociate muchiilor /
arcelor.
Astfel, matricea de adiacen devine matricea costurilor, o matrice ptratic avnd
linii i coloane (unde este numrul de vrfuri din graf), definit astfel:
C[][] va fi costul muchiei / arcului de la la dac exist, sau o dac = ,
sau o valoare special, care depinde de problem, indicnd faptul c nu exist muchie / arc de
la la .
n listele de adiacen nu vom reine doar vrfurile adiacente, ci i costurile arcelor /
muchiilor corespunztoare.
n lista muchiilor / arcelor vom aduga pentru fiecare muchie un cmp suplimentar
(costul).
5
Exemple:
Parcurgerea grafurilor
Parcurgerea unui graf presupune examinarea sistematic a vrfurilor grafului, cu scopul
prelucrrii informaiilor asociate vrfurilor.
Exist dou metode fundamentale de parcurgere a grafurilor:
parcurgerea n adncime (Depth First Search - DFS)
parcurgerea n lime (Breadth First Search - BFS).
Parcurgnd graful din figur n adncime considernd drept vrf de start vrful 3 putem
obine urmtoarea ordinea de vizitare a vrfurilor accesibile din nodul de start:
3, 4, 1, 2, 6, 7, 10, 5, 9
(Pentru aceast succesiune, ordinea de vizitare a vecinilor unui vrf este ordinea
cresctoare a numerelor lor)
Implementare:
Graful va fi reprezentat prin liste de adiacen (n una dintre cele trei variante).
Pentru a reine care vrfuri au fost deja vizitate n timpul parcurgerii vom utiliza un vector ,
cu componente din mulimea {0, 1}, cu semnificaia
[] = 1 dac vrful a fost deja vizitat, respectiv 0, n caz contrar.
Observnd c ordinea de parcurgere complet a vecinilor unui nod este ordinea
invers a atingerii lor, abordarea cea mai simpl folosit pentru parcurgerea efectiv este cea
recursiv.
Observaii:
Complexitatea parcurgerii n adncime (DFS) n cazul reprezentrii prin liste
de adiacen este ( + ) (n cazul reprezentrii prin matrice de adiacen complexitatea este
(2 )).
Implementare:
Graful va fi reprezentat prin liste de adiacen (n una dintre cele trei variante).
Pentru a reine care vrfuri au fost deja vizitate n timpul parcurgerii vom utiliza un vector ,
cu componente din mulimea {0, 1}, cu semnificaia
[] = 1 dac vrful a fost deja vizitat, respectiv 0, n caz contrar.
Observnd c ordinea de parcurgere complet a vecinilor unui nod este exact
ordinea atingerii lor, abordarea cea mai simpl folosit pentru parcurgerea efectiv este cea
care folosete o coad (pentru a reine ordinea vizitrii elementelor). Aceast coad poate fi
implementat clasic (printr-un vector cu elemente; variabilele i rein poziia
de nceput, respectiv de sfrit a cozii) sau cu ajutorul STL-ului ().
Observaii:
Parcurgerea n lime are o proprietate remarcabil: fiecare vrf este vizitat pe
cel mai scurt drum / lan ncepnd din vrful de start.
Complexitatea parcurgerii n lime (BFS) n cazul reprezentrii prin liste de
adiacen este ( + ) (n cazul reprezentrii prin matrice de adiacen complexitatea este
(2 )).
Conexitate
Un graf se numete conex dac oricare ar fi i vrfuri din graf exist lan ntre i
.
Exemple:
Observaii:
Orice graf neconex conine cel puin dou componente conexe.
Componentele conexe ale unui graf sunt disjuncte.
Componentele conexe ale grafului constituie o partiie a mulimii vrfurilor
grafului.
Tare - Conexitate
Un graf orientat se numete tare-conex dac oricare ar fi i vrfuri din graf exist
drum de la la i drum de la la .
Exemple:
Observaie:
Componentele tare-conexe constituie o partiie a mulimii vrfurilor grafului.
Grafuri hamiltoniene
Un graf neorientat se numete hamiltonian dac el conine un ciclu hamiltonian.
Un graf orientat se numete hamiltonian dac el conine un circuit hamiltonian.
Un ciclu / circuit elementar se numete hamiltonian dac el trece prin toate vrfurile
grafului.
Exemple:
10
Grafuri euleriene
Un graf neorientat se numete eulerian dac el conine un ciclu eulerian.
Un graf orientat se numete eulerian dac el conine un circuit eulerian.
Un ciclu / circuit se numete eulerian dac el trece prin fiecare muchie / arc al grafului
exact o dat.
Exemple:
11
Aplicaii
Sortaret (Infoarena)
Dfs (Infoarena)
Bfs (Infoarena)
Ctc (Infoarena)
Mere (.campion)
Prieteni3 (.campion)
Turn1 (.campion)
Chei (.campion)
Reinvent (.campion)
29C (Codeforces)
Program1 (.campion)
Bile1 (.campion)
Drumuri1 (.campion)
Coment (.campion)
Grafxy (.campion)
Sate (Infoarena)
Soldati (.campion)
Fotbal2 (Infoarena)
Dfs (.campion)
Jungla (.campion)
Fazan (.campion)
Legturi
MIT Course: Graph Teory and Coloring
MIT Course: Graph Teory II: Minimum Spanning Trees
MIT Course: Graph Teory III
Bibliografie
Emanuela Cerchez, Marinel erban, Programarea n limbajul C/C++ pentru
liceu volumul III, Editura Polirom, Iai, 2006
Alexandru Cohal
alexandru.cohal@yahoo.com
alexandru.c04@gmail.com
Noiembrie 2013
12