Sunteți pe pagina 1din 16

1.

Scurt istoric al teoriei grafurilor


Originile teoriei grafurilor se gasesc in rezolvarea unor probleme de jocuri si
amuzamente matematice, care au atras atentia unor matematicieni de seama cum ar fi: Euler,
Hamilton, Cayley, Sylvester, Birkoff.
Data nasterii teoriei grafului este considerata a fi anul 1736, cand matematicianul
Leonhard Euler a publicat un articol in care a clarificat problema celor 7 poduri si a prezentat
metode pentru rezolvarea altor probleme de acelasi tip.
Cu 200 ani mai tarziu aparea la Leipzic prima carte de teorie a grafurilor al carei autor
este matematicianul maghiar Denes Koreg. In amintirea contributiei lui Euler unele notiuni si
tipuri de grafuri de care acesta s-a ocupat sunt denumite de catre Koreg lant eulerian, graf
eulerian etc. Un alt matematician care s-a ocupat de aceleasi probleme ca si Euler, dar care
si-a publicat rezolvarile cercetarilor sale in anul 1873 a fost Carl Hierholzer.
Alte izvoare ale teoriei grafurilor sunt: studiul retelelor electrice, problema celor 4 culori,
aplicatiile teoriei grafurilor in chimie (initiate de Cayley), probleme hamiltoniene, grafuri
planare.
Fizicianul Kirchoff a studiat la mijlocul secolului al XIX-lea retele electrice cu metode
care apartin astazi teoriei grafului contribuind la dezvoltarea acestei teorii.
Termenul graf a fost folosit pentru prima data in sensul sau actual in 1878 de matematicianul
Sylvester. Teoria grafurilor are numeroase apeluri in chimie, contribuind in mare masura la
rezolvarea problemelor de numarare a grafurilor apartinand unor clase speciale.
Teoria grafurilor este folosita in domenii variate: de la chimie la economie, de la studiul
retelelor electrice la critica textelor de politica, devenind o disciplina majora.

2. Grafuri neorientate

Definitie : Se numeste graf neorientat o pereche de multimi G = (A,B) in care A este multimea
nodurilor (este finita si nevida) si B este multimea relatiilor/muchiilor.
B = { (x,y) / x apartine lui A, y apartine lui A }
Definitie : O muchie a apartine de B este deci o submultime cu elemente {x,y} de varfuri
distincte din A si o vom nota (x,y) - notatie muchie. Vom spune ca varfurile x si y sunt
adiacente in G si ca ambele sunt incidente cu muchia (x,y).
Varfurile x si y se mai numesc si extremitatile muchiei (x,y).
Daca B1 si B2 sunt 2 muchii care au o extremitate comuna,ele vor fi numite de asemenea
incidente.
A = {1,2,3,4,5}
B = {(1,2),(1,3),(2,3),(2,5)}
Exemplu:
-1 este adiacent cu 2 si 3
-1 si 2 sunt extremitatile (1,2)
- nodul 1 este incident cu (1,2)
- (5,2) si (2,3) sunt incidente

2.1. Gradul unui nod la grafurile neorientate


Gradul unui nod x , notat cu d(x), reprezinta numarul muchiilor care trec prin nodul x (incidente
cu nodul x).
Exemplu:
- d(1)=2
Nodul care are gradul 1 se numeste nod terminal.
Nodul care are gradul 0 se numeste nod izolat.
Proprietati:
1. d + (x) + d - (x) = d(x)
2. Daca un graf are m muchii sau arce atunci: d( x 1 )+d(x2 ) + ... + d(xn ) = 2m

2.2. Lanturi
Se numeste lant o succesiune de noduri x1 ... xk , cu proprietatea ca oricare doua noduri
vecine (xi, xi+1 ) apartin de B.
x1, xk sunt extremitatile lantului
Lungimea lantului este egala cu numarul de muchii care il compun, k-1.
Daca nodurile din lant sunt distincte, atunci lantul este elementar, in caz contrar este
neelementar.
Exemplu:
1,2,3,1,4 - Lant neelementar (lungime 4)
1,2,3,4 - Lant elementar (lungime 3)
1,2,3,1,2,5 - Lant neelementar (lungime 5)
1,2,3,5 - Nu este lant

2.3. Cicluri
Se numeste ciclu intr-un graf neorientat un lant x 1, x2 ... xk cu proprietea ca x1=xk si
oricare 2 muchii (xi, xi+1) sunt distincte.
Daca un ciclu are toate nodurile distincte 2 cate 2 cu exceptia capetelor, atunci el se
numeste ciclu elementar, in caz contrar neelementar.
Exemplu:
1,2,3,4,1 - Ciclu elementar
2,3,4,1,2 - Ciclu elementar
1,2,3,4,2,3,1 - Nu este ciclu
1,2,3,4,2,5,1 - Ciclu neelementar

3. Grafuri orientate

Definitie: Se numeste graf orientat o multime ordonata (A,B) in care A este multimea
nodurilor (finita si nevida), iar B este multimea arcelor.
Definitie: Pentru muchia (x,y) nodul x reprezinta extremitatea initiala,iar y extremitatea
finala a muchiei. De remarcat faptul ca la grafurile orientate muchia (x,y) este diferita de
muchia(y,x). Raman valabile notiunile de varfuri adiacente si varfuri incidente cu o muchie
prezentate la grafuri neorientate.

3.1. Gradul unui nod la grafurile orientate


Gradul exterior al unui varf x notat cu d + (x), reprezinta numarul arcelor care ies din
nodul x,adica nr arcelor de forma (x,y)apartine de B.
Gradul interior al unui varf x notat cu d - (x), reprezinta numarul arcelor care intra in
nodul x,adica nr arcelor de forma (x,y)apartine de B.
A = {1,2,3,4,5}
B = {(1,2),(2,1),(2,3),(3,1),(5,2)}
Exemplu:

d(1)=3;

d + (1)=1;

d - (1)=2

Proprietati:
1. d + (x1) + d + (x2) + ... + d + (xn) = m
2. d - (x1) + d - (x2) + ... + d - (xn) = m

3.2. Drumuri
Se numeste lant o succesiune de arce u 1 , u2 ... uk , cu proprietatea ca oricare doua
arce de pe pozitii consecutive au un nod comun. Nu conteaza ordinea de parcurgere.
Se numeste drum o succesiune de noduri x 1 , x2 ... xk cu proprietatea ca (xi ,xi+1 ) este
arc. Conteaza ordinea de parcurgere.
Daca nodurile sunt distincte, drumul se numeste elementar, in caz contrar este
neelementar.
Exemplu:

Lanturi

Drumuri

(1,2),(2,3),(3,4) - Da
(1,2),(5,2),(2,3) Da
(1,2),(2,1),(1,3) Nu
(1,2),(2,3),(1,5),(5,2) Nu

1,2,3,1,2 - Drum
neelementar
1,2,3,4 - Drum
elementar
3,1,2,5 - Nu este drum

3.3. Circuite
Se numeste circuit intr-un graf un drum x1, x2 ... xk cu proprietate ca x1 = xk si arcele
(xi, xi+1) sa fie distincte doua cate doua.
Un circuit in care toate nodurile sunt distincte cu exceptia capetelor se numeste circuit
elementar.
Exemplu:
1,2,3,1 - Circuit elementar
2,3,1,2 - Circuit elementar
1,2,3,1,2,1 - Nu este circuit

4. Reprezentarea grafurilor in memorie


4.1. Reprezentarea prin matrice de adiacenta
A. Pentru grafuri neorientate
a[i,j] = 1, daca intre i si j este muchie ;

a[i,j] = 0 altfel
0
1

1
1

1
0
1
1
1

1
1
0
1
0

1
1
1
0
0

1
1
0

0
0

Observatie: Pe diagonala principala toate elementele sunt 0 (nu avem bucle).


Matricea este simetrica fata de diagonala principala, deci: a[i,j] = a[j,i].

B. Pentru grafuri orientate

a[i,j] = 1, daca exista arcul (i,j);

a[i,j] = 0, altfel.
0
1

0
0

1
0
0
0
1

0
1
0
0
0

0
0
1
0
0

1
0
0

0
0

4.2. Liste de adiacenta


Pentru fiecare nod se memoreaza o lista a vecinilor sai.
Pentru intregul graf este necesar un vector de liste (P) in care P i este adresa primului
element al listei asociate lui i.

Lista de adiacenta
asociata
2,3,5

1,3

1,2

Nod

De exemplu, pentru i = 1, informatia din lista figurata mai sus se va completa astfel:
p[1] 2 3 5.

Lista de adiacenta
asociata
2,3

1,3

Nod

Observatie: pentru grafurile orientate se memoreaza in lista lui i nodurile k pentru care
exista arcul (i,k)

1.3. Matrice arce-noduri


Este o matrice b de dimensiune linii si m coloane in care:
- elementul b[i][j]= 1,daca i reprezinta extremitatea initiala a arcului;
- elementul b[i][j]= -1,daca i reprezinta extremitatea finala a arcului;
- elementul b[i][j]= 0,daca nodul i nu este nici o extremitate pt arcul cu nr j .
Este folosita in special pentru grafurile orientate.

5. Parcurgerea grafurilor
Parcurgerea unui graf presupune vizitarea (prelucrarea) nodurilor grafului, o singura
data fiecare, intr-o anumita ordine.
Nodurile vizitate sunt legate intre ele direct sau indirect.
In functie de ordinea relativa a nodurilor exista 2 metode de parcurgere:
1. Metoda parcurgerii pe latime - Breadth First (BF)
2. Metoda parcurgerii in adancime - Depth First (DF)

5.1. Metoda parcurgerii pe latime - Breadth First (BF)


A. Pentru grafuri neorientate
Se porneste de la un nod
oarecare x.
Se viziteaza toti vecinii directi ai
nodului x daca nu au fost deja
vizitati.
Fiecare dintre nodurile vizitate la
pasul anterior devine nod curent
si este prelucrat la fel ca nodul x.
x=1
1, 2, 3, 4, 6, 7, 8, 9, 5

B. Pentru grafuri orientate


Observatie: algoritmul se adapteaza astfel incat sa poata fi luati in considerare toti
vecinii unui nod.

5.2. Metoda parcurgerii in adancime - Depth First (DF)

A. Pentru grafuri neorientate


Se porneste de la un nod oarecare x.
Se alege primul vecin al lui x care nu a fost inca vizitat,de ex y,dupa care se trece la
primul vecin nevizitat al lui y si asa mai departe pana cand se parcurge in adancime
ramura respectiva.
Cand s-a ajuns la capatul ei, se revine la nodul din care s-a plecat ultima data si se
parcurge urmatorii sai vecini nevizitati.

B.Pentru grafuri orientate


Parcurgerea este similara, punandu-se conditia de parcurgere a tuturor vecinilor unui
nod indiferent de sens.

6. Tipuri de grafuri

6.1. Graf partial


Fie G=(A,B) si G1 = (A1, B1 ).
Spunem ca G 1 este un graf partial al lui G daca A=A 1 si B 1 este inclus sau egal cu B.
Un graf partial se obtine dintr-un graf, indepartand o parte dintre muchiile sale si
pastrand toate nodurile acestuia.

6.2. Subgraful unui graf


Fie G=(A, B) si G1 = (A1, B1);
A1 inclus sau egal cu A; B1 inclus sau egal cu B.
B1 = {(x,y) / oricare x,y apartine A1 daca (x,y) apartine de B => (x,y) apartine de B1}
Subgraful se obtine din graful initial selectand o parte din nodurile sale si o parte din
nodurile adiacente cu acesta.

6.3. Graf complet


Un graf este complet daca oricare doua varfuri distince sunt adiacente.

Proprieti:
1. Un graf neorientat cu n noduri are n(n-1)/2 muchii.
2. Exista un singur graf complet neorientat cu n noduri.
3. Exista mai multe grafuri orientate complete cu n noduri.

6.4.Grafuri bipartite
Fie G=(A,B) neorientat. G este bipartit daca exista doua multimi, A1 si A2 astfel incat
A1 A2 = si A1 A2 = A, iar oricare muchie (x,y) apartinand lui B are un capat in multimea
A1 si celalalt in A2 .
Un graf bipartit este bipartit complet daca fiecare nod din multimea A1 este adiacent cu
toate nodurile din A2 si reciproc.

6.5.Grafuri conexe
Un graf este conex daca este format dintr-un singur nod sau daca intre oricare doua
noduri ale sale exista cel putin un lant.

Aplicand algoritmul de parcurgere in latime a unui graf putem stabili daca un graf este
conex sau nu astfel: daca in urma parcurgerii vor fi vizitate toate nodurile grafului atunci graful
este conex, in caz contrar nu este conex.
A. Pentru grafuri neorientate

B. Pentru grafuri orienate

Se numeste componenta conexa a unui graf G un subgraf conex al grafului si care este
maximal in raport cu aceasta proprietate (daca i se adauga un nod isi pierde aceasta
proprietate).
Observatie: pentru grafurile orientate nu se tine cont de orientarea arcelor.
Daca numarul componentelor conexe dintr-un graf este mai mare decat 1, atunci graful nu
este conex.U graf conex are o sigura componenta conexa care cuprinde nodurile sale.
Un graf fara ciclu se numeste aciclic.
Teorema :Un graf neorientat conex cu n noduri si n-1 muchii este aciclic maximal cu
aceasta proprietate. Daca se adauga o noua muchie graful nu mai este aciclic.
1.
2.
3.
4.

Proprietati:
Daca un graf cu n noduri are p comp conexe, atunci numarul minim de muchii care
trebuie adaugat ca sa devina conex este p-1.
Daca un graf conex cu n noduri are n-1 muchii, atunci orice pereche de noduri este
legata printr-un lant si numai unul.
Daca un graf neorientatat cu n noduri si m muchii este conex, numarul maxim de muchii
care se pot elimina pentru a obtine un graf partial conex este: m-n+1.
Daca un graf are n noduri,m muchii si p componente conex, numarul de muchii care
trebuie eliminate pentru a obtine un graf partial aciclic este egal cu m-n+p.

Teorema: Un graf care nu contine noduri izolate este eulerian daca si numai daca este
conex si gradul tuturor nodurilor sunt numere pare.

6.6. Grafuri tare conexe


Un graf este tare conex daca ar un singur nod sau daca oricare ar fi (x,y) exista drum
de la x la y si exista drum de la y la x.
Determinarea componentelor tare conexe: Se poate realiza prin 2 metode:
Utilizand metoda DF/BF
Utilizand matricea drumurilor
O componenta tare conexa este un subgraf conex al grafului si care este maximal in
raport cu aceasta proprietate.
Observatie: reunind toate arcele din componentele tare conexe se poate obtine o
multime mai mica decat multimea arcelor grafului initial.
Se poate construi un graf al componentelor tare conexe in care fiecare componenta
tare conexa formeaza un nod iar arcele simuleaza legaturile dintre ele.

Determinarea componentelor tare conexe utilizand matricea drumurilor d(i,j) = 1, daca


exista drum de la i la j d(i,j) = 0, altfel G31:
1
1

1
1

1
1
1
1
1

0
0
1
0
1

1
1
1
1
1

0
0
1

0
1

Componentele tare conexe se determina cu ajutorul algoritmului lui Roy- Warshall.

6.7.Grafuri Hamiltonian
1. Lant hamiltonian: lant elementar care contine toate nodurile grafului.
2. Ciclu hamiltonian: ciclu elementar care contine toate nodurile grafului.
3. Graf hamiltonian: graf care contine un ciclu hamiltonian.

Conditii de suficienta:
Teorema lui Dirac: Fie G dat prin perechea (A,B). Daca G are un numar de cel putin 3 varfuri
astfel incat gradul fiecarui nod respecta conditia d(x)=n/2, atunci graful este hamiltonian.
Un graf hamiltonian nu poate avea noduri izolate.

6.8. Grafuri euleriene


1. Ciclu eulerian: ciclu care trece prin toate muchiile unui graf exact o data.
2. Graf eulerian: graf care contine cel putin un ciclu eulerian G33:G34:G35:
3. Teorema : Fie un graf conex fara noduri izolate cu n= 3 noduri. Graful este eulerian
daca si numai daca pentru oricare nod al sau, x, d(x) este par.

A. Problema podurilor din Koningsberg

Adeseori suntem tentati sa credem simplul fapt de a traversa strazi sau poduri nu
implica nici o idee deosebita. Iata nsa ca exista o celebra problema de traversare n care
singura idee implicata este aceea de traversare, problema celor sapte poduri din

Knigsberg . Aceasta banala si totusi foarte controversata problema a dus la aparitia si


dezvoltarea teoriei grafurilor.
Problema se pune cam asa:

Orasul Knigsberg era asezat pe coasta Marii Baltice, la gurile rului Pregel. Pe ru
erau doua insule legate de tarmuri si ntre ele de sapte poduri ca n figura 1.
Oamenii care cutreierau aceste insule au observat ca daca porneau de pe malul sudic
al rului, nu puteau sa-si planifice plimbarea astfel nct sa traverseze fiecare pod o singura
data. Se parea ca ori trebuia sa sara un pod ori sa-l traverseze de doua ori.
n anul 1735 Euler a descoperit ca nu mai are rost sa se ncerce, propunnd
urmatoarea analiza a problemei, din punct de vedere matematic:

Sa consideram mai nti insula estica (Figura 2):


Sa consideram acum insula vestica: sunt cinci poduri care duc pe ea, iar cinci este din
nou numar impar. Asadar plimbarea ncepe n afara insulei, si deci trebuie sa se termine pe
insula vestica.
Aceasta nseamna ca plimbarea se termina n doua locuri diferite simultan ceea ce e
imposibil.
Solutia data de Euler este tipica pentru personalitatea si ingeniozitatea sa. Tot el a scris
n anul 1736 prima lucrare de teorie a grafurilor despre problema acestor sapte poduri.
Un ciclu al unui graf G care contine toate muchiile lui G se numeste ciclu eulerian . Un graf G
care are un ciclu eulerian se numeste graf eulerian.
Un graf G fara vrfuri izolate este eulerian daca si numai daca este conex si gradele
tuturor vrfurilor sale sunt numere pare.
Din punct de vedere al teoriei grafurilor, problema se pune cam asa: cele patru regiuni
(insule si maluri) A,B,C,D si cele sapte poduri le reprezentam n graful urmator (fig.3.):

Figura 3
Muchiile grafului reprezentnd posibilitatile de trecere de pe un mal pe un pod si reciproc.
Problema are solutie daca acest graf contine un ciclu eulerian. Un astfel de ciclu,
utilizeaza la fiecare trecere printr-un vrf doua muchii ce nu mai pot fi folosite pentru o noua
trecere. Cum fiecare dintre cele patru vrfuri (A,B,C,D) au grade impare, rezulta ca ultima
muchie va ramne nefolosita sau va fi folosita pentru a face trecerea de final (pentru a ncheia
plimbarea). Aceasta ar nsemna ca ori va ramne la unul din vrfuri, o muchie nefolosita (fapt
ce demonstreaza ca nu avem un ciclu eulerian) ori plimbarea ar trebui sa se termine n mai
multe locuri simultan ceea ce e iarasi imposibil.
Ciclu eulerian : Fiind dat un graf neorientat, sa se verifice daca este graf eulerian si n
caz afirmativ, sa se determine un ciclu eulerian al sau.

B. Determinarea unui ciclu eulerian

Se porneste de la un nod oarecare si se construieste un ciclu.


Se parcurg nodurile din ciclul determinat anterior; daca exista un nod care mai are
muchii neincluse in ciclul anterior se onstruieste un nou ciclu provenind de le acest nod.
Ciclul construit este inclus in ciclul initial in locul nodului gasit la pasul anterior.
pas 1: c1: 1,2,3,1
c2: 2,4,7,2
pas 2: c1: 1,2,4,7,2,3,1
c2: 7,5,10,7
pas 3: c1: 1,2,4,7,5,10,7,2,3,1
c2: 7,8,11,7
pas 4:
c1: 1,2,4,7,8,11,7,5,10,7,2,3,1
c2: 7,6,9,7
pas 5:
c1:

1,2,4,7,6,9,7,8,11,7,5,10,7,2,3,1

7. Drumuri maxime/minime
Problemele de optim presupun ca fiecare muchie a grafului are asociat un anumit cost
(de exemplu, distanta intre doua orase, i si y). Aceste informatii se memoreaza in matricea
costurilor:
c(i,j) = costul asociat muchiei (i,j);
c(i,j) = +8, daca nu exista muchia (i,j);

7.1. Algoritmi pentru determinarea costului minim/maxim:


Pentru determinarea drumului de cost minim/maxim intre 2 noduri ale unui graf se poate
folosi:
1.Algoritmul lui Roy-Floyd
2.Algoritmul lui Dijkstra
1. Algoritmul lui Roy-Floyd
Algoritmul foloseste un principiu asemanator cu cel care este utilizat pentru
determinarea matricei drumurilor: gasirea drumului ptim intre 2 noduri oarecare i si j prin
descoperirea drumurilor optime care-l compun si care trec prin nodurile k, se face prin
transformarea matricei costurilor.
Interpretarea datelor din matricea costurilor obtinute in urma transformarii se face
astfel:drumul de la nodul i la nodul j are costul a i,j .Matricea nu furnizeaza info despre
etichetele drumului cu costul minim.
Informatiile din matricea costurilor transformata prin algoritmul Roy-Floyd se pot folosi
pentru a verifica daca exista drum cu costul minim intre 2 noduri de grafuri,iar in caz afirmativ
se poate afisa lungimea lui si se poate descoperi drumul.
2. Algoritmul lui Dijkstra
Algoritmul Dijkstra construieste drumurile cu costul minim care pornesc de la un nod
oarecare x-nodul sursa, pana la fiecare nod din graful G=(A,B), nodul destinatie. Exista o
multime cu nodurile care au fost deja selectate - S si o coada de prioritati Q cu nodurile care
nu au fost selectate inca: Q=V-S,astfel un nod y este declarat selectat,atunci cand s-a
determinat costul final al drumului cu costul min de la nodul sursa x la el. Selectarea unui nod
nu este echivalenta cu gasirea drumului cu costul minim deoarece este posibil ca in urma
calcularii costului sa rezulte ca nu exista drum de la nodul x la acel drum.
In coada Q prioritatea cea mai mare o are nodul pentru care costul drumului are
valoarea cea mai mica dintre toate costurile de drumuri care pornesc de la nodul x la celelalte
noduri neselectate inca. La fiecare extragere a unui nod din coada de prioritati Q, nodul este
adaugat la multimea S, iar coada de prioritati este reorganizata in functie de acest nod (se
calculeaza costul rumurilor de la nodul x la nodurile ramase in coada, considerand ca unele
drumuri daca trec si prin nodul extras pot sa-si micsoreze costul). Pentru calcularea drumurilor
de lungime minima se intretine o multime in care se memoreaza costul drumurilor de la nodul
x la nodurile neselectate, costuri care se recalculeaza la fiecare extragere de nod.
Drumul cu costul minim care porneste din nodul x este format din nodul initial x si creste
pana cand coada de prioritati Q nu mai contine noduri.