Documente Academic
Documente Profesional
Documente Cultură
tipic este cel al celor din economie), se cauta, in primul rand, o metoda de reprezentare a lor care
sa permita receptarea intregii probleme dintr-o privire (pe cat posibil) si prin care sa se
evidentieze cat mai clar toate aspectele acesteia.
In acest scop se folosesc imagini grafice gen diagrame, schite, grafice etc. O reprezentare
dintre cele mai utilizate este cea prin grafuri. Acestea sunt utilizate in special pentru vizualizarea
sistemelor si situatiilor complexe. In general, vom reprezenta componentele acestora prin puncte
in plan iar relatiile (legaturile, dependentele, influentele etc) dintre componente prin arce de
curba cu extremitatile in punctele corespunzatoare. Intre doua puncte pot exista unul sau mai
multe segmente (in functie de cate relatii dintre acestea, care ne intereseaza, exista) iar
segmentelor li se pot asocia sau nu orientari (dupa cum se influenteaza cele doua componente
intre ele), numere care sa exprime intensitatea relatiilor dintre componente etc.
Este evident, totusi, ca aceasta metoda are limite, atat din punct de vedere uman (prea
multe puncte si segmente vor face desenul atat de complicat incat se va pierde chiar scopul
pentru care a fost creat - claritatea si simplitatea reprezentarii, aceasta devenind neinteligibila)
cat si din punct de vedere al tehnicii de calcul (un calculator nu poate 'privi' un desen ca un om).
Din acest motiv, alaturi de expunerea naiv-intuitiva a ceea ce este un graf, data mai sus,
se impune atat o definitie riguroasa cat si alte modalitati de reprezentare a acestora, adecvate in
general rezolvarilor matematice.
Se numeste multigraf un triplet G = (X, A, f) in care X si A sunt doua multimi iar f este o
functie, definita pe produsul vectorial al lui X cu el insusi (X2 = XX), care ia valori in
multimea partilor multimii A (notata P(A)). Multimea X se numeste multimea nodurilor
multigrafului si elementele sale se numesc noduri (sau varfuri) ale multigrafului, iar A
reprezinta multimea relatiilor (legaturilor) posibile intre doua noduri ale multigrafului.
Se numeste graf orientat un multigraf in care multimea A are un singur element: A = .
In acest caz multimea partilor multimii A are doar doua elemente: multimea vida si
intreaga multime A. Daca unei perechi orientate (xi, xj) din X2 i se asociaza prin functia f
multimea A atunci spunem ca exista arc de la nodul xi la nodul xj iar perechea (xi,xj) se va
numi arcul (xi,xj). Nodul xi se numeste nod initial sau extremitate initiala a arcului (xi,xj)
iar nodul xj se numeste nod final sau extremitate finala a arcului (xi,xj). Arcul (xi,xj) este
incident spre interior varfului xj si incident spre exterior varfului xi. Daca pentru un arc
nodul initial coincide cu nodul final atunci acesta se numeste bucla. Nodurile xi si xj se vor
numi adiacente daca exista cel putin unul din arcele (xi,xj) si (xj,xi).
Daca unei perechi orientate (xi, xj) din X2 i se asociaza prin functia f multimea vida
atunci spunem ca nu exista arc de la nodul xi la nodul xj.
Este evident ca a cunoaste un graf orientat este echivalent cu a cunoaste varfurile si arcele
sale. Din acest motiv putem defini un graf orientat prin perechea (X,U), unde X este
multimea varfurilor sale iar U multimea arcelor sale.
De asemenea, putem cunoaste un graf orientat cunoscand multimea nodurilor si, pentru
fiecare nod, multimea arcelor incidente spre exterior. Din acest motiv putem defini un graf
orientat ca o pereche (X,) unde X este perechea nodurilor iar este o functie definita pe
X cu valori multimea partilor lui X, valoarea acesteia intr-un nod xi, (xi) X fiind
multimea nodurilor adiacente nodului xi, prin arce pentru care xi este extremitatea initiala.
Se numeste graf neorientat un multigraf in care multimea A are un singur element iar
functia f are proprietatea: f[(xi,xj)] = f[(xj,xi)] , oricare ar fi nodurile xi si xj din X
In aceste conditii, daca f[(xi,xj)] = f[(xj,xi)] = A atunci perechea neorientata este o muchie
iar daca f[(xi,xj)] = f[(xj,xi)] = spunem ca nu exista muchie intre varfurile xi si xj.
Deoarece, in cele mai multe din cazurile practice care vor fi analizate in acest capitol,
situatia este modelata matematic printr-un graf orientat, vom folosi, pentru simplificarea
expunerii, denumirea de graf in locul celei de graf orientat iar in cazul in care graful este
neorientat vom specifica acest fapt la momentul respectiv.
12. drum simplu: un drum in care fiecare arc apare o singura data;
13. putere de atingere a unui nod xi < X in graful G: numarul de noduri la care se poate ajunge
din xi. Puterea de atingere se noteaza cu p(xi), 1 i n si evident p(xi) . +ix
14. drum hamiltonian: un drum elementar care trece prin toate nodurile grafului;
15. drum eulerian: un drum simplu care contine toate arcele grafului;
16. lant: un drum in care arcele nu au neaparat acelasi sens de parcurgere;
17. circuit: un drum in care nodul initial coincide cu cel final;
18. circuit elementar: un drum in care fiecare nod apare o singura data, cu exceptia celui final,
care coincide cu cel initial;
19. circuit simplu: un drum in care fiecare arc apare o singura data;
20. circuit hamiltonian: un circuit care trece prin toate nodurile grafului;
21. ciclu: este un circuit in care arcele nu au neaparat acelasi sens de parcurgere;
22. ciclu elementar: un ciclu in care fiecare nod apare o singura data, cu exceptia celui final,
care coincide cu cel initial;
23. ciclu simplu: un ciclu in care fiecare arc apare o singura data; Observatie: Intr-un graf
neorientat notiunile de drum si lant sunt echivalente si de asemenea cele de circuit si ciclu.
24. graf partial al unui graf G = (X,U): este un graf G'(X,U') cu U' U;
25. subgraf al unui graf G = (X,): este un graf G'(X',') unde X' X si '(xi) = (xi) X'
pentru orice xi X'; 113
Elemente de teoria grafurilor
26. graf redus al unui graf G = (X,U): este un graf G*(X*,U*) unde X* este formata din multimile
unei partitii de multimi nevide ale lui X, iar () exista doar daca i j si exista cel putin un arc in
U, de la un nod din la un nod din *iX,*jX*iX*jX.
27. graf tare conex: este un graf in care intre oricare doua noduri exista cel putin un drum;
28. graf simplu conex: este un graf in care intre oricare doua noduri exista cel putin un lant;
Observatie: Pentru grafuri neorientat notiunile de tare conex si simplu conex sunt echivalente,
graful numindu-se doar conex;
29. componenta tare conexa a unui graf G = (X,U): este un subgraf al lui G care este tare conex
si nu este subgraful nici unui alt subgraf tare conex al lui G (altfel spus, intre oricare doua noduri
din componenta exista cel putin un drum si nu mai exista nici un nod in afara componentei legat
printr-un drum de un nod al componentei).
1.3.a.Grafuri neorientate
Definitie :Se numeste graf neorientat o pereche ordonata de multimi (X,U), unde :
-
U este o multime de perechi neordonate de cate doua elemente din X, numite muchii
sau arce.
Asadar, un graf neorientat poate fi reprezentat sub forma unei figuri geometrice alcatuita
din puncte (varfuri, noduri) si linii drepte sau curbe care unesc aceste puncte (muchii, arce).
Vom folosi:
-
Daca o muchie trece prin nodurile x si y, atunci ea se noteaza (x,y) sau [x,y].
Pe caz general, intr-un graf neorientat G = (X,U) notam :
-
X=
multimea varfurilor ;
U=
multimea muchiilor ;
Definitie: Gradul unui varf x, notat d(x), reprezinta numarul muchiilor care trec prin nodul x
(incidente cu nodul x).
Un varf care are gradul 0 se numeste varf izolat.
Exemplu :
Deoarece muchia (a,b) este totuna cu muchia (b,a), rezulta ca a[i,j] = a[j,i] ,
oricare ar fi i ,j
. Din acest motiv, matricea de adiacenta pentru un graf neorientat
este simetrica fata de diagonala principala.
1.
2.
Pe fiecare linie i din listele vecinilor contine indicii coloanelor pe care se gasesc valori de
1 in linia i a matricei de adiacenta.
Citirea unui graf memorat cu ajutorul matricei de adiacenta
Varianta 1:
Citirea numarului de varfuri,citirea regiunii de deasupra diagonalei principale urmata
de simetrizare.
var a:array[1..120,1..120] of 0..1;
x,d,i,j,n:byte;
begin
write('nr de varfuri:=');readln(n);
for i:=1 to n-1 do
for j:=i+1 to n do begin
write('a[',i,',',j,']:=');readln(a[i,j]);
a[j,i]:=a[i,j];
end;
end.
Varianta 2:
Se citesc n-nr de varfuri,m-nr de muchii;
-initializarea matricei de adiacenta cu zero;
-citirea extremitatii fiecarei muchii;
-completarea matricei de adiacenta.
var a:array[1..120,1..120] of 0..1;
x,d,i,j,n:byte;
begin
write('n:=');readln(n);
write('m:=');readln(m);
for i:=1 to n do
for j:=1 to n do a[i,j]:=0;
for i:=1 to m do begin
writeln('Muchia ',i,' este:');
readln(x,y);
a[x,y]:=1;
a[y,x]:=1;
end;
end.
Definitie: Fie graful G = (X,U). Un graf partial al lui G este un graf G1 = (X,V), cu V U.
Altfel spus, un graf partial G1 al lui G, este chiar G, sau se obtine din G pastrand toate varfurile si
suprimand niste muchii.
X si
T U, iar T va contine numai muchiile care au ambele extremitati in Y. Altfel spus, un subgraf
G1 al lui G se obtine din G eliminand niste varfuri si pastrand doar acele muchii care au ambele
extremitati in multimea varfurilor ramase.
Exemplu :
-graful initial
a. Eliminam muchiile care trec prin nodul 4 graf partial
Exemplu :
L1 = (1,2,3,4)
- lant elementar
L2 = (1,2,4,3,2,3,4)
- lant ne-elementar
- ciclu elementar
- ciclu ne-elementar
C5 = (5,2,3,4,2,1,5)
- ciclu ne-elementar
Obs. In cadrul unui lant, muchiile se pot repeta, dar in cadrul unui ciclu ele trebuie sa fie
distincte.
Definitie.Un graf G este conex daca oricare ar fi doua varfuri ale sale, exista un lant care le
leaga.
Obs. Intr-un graf conex, luand oricare doua varfuri , putem gasi cel putin un traseu(lant) care
porneste dintr-un varf si ajunge in celalalt.
Definitie.Se numeste componenta conexa a grafului G =(X,U), un subgraf G1=(X1,U1) a lui
G,conex, cu proprietatea ca nu exista nici un lant care sa lege un varf din X1 cu un varf din X-X1.
Exemplu.
BEGIN
Citire; DF(1);
f:=true;
for i:=1 to n do if not viz[i] then f:=false;
if f then write('Graful este conex')
else write('Graful nu este conex');
END.
1.6.Parcurgerea grafurilor
Parcurgerea grafurilor se realizeaza cu scopul vizitarii varfurilor acestora.Fiecare varf se va
vizita o singura data,cu scopul prelucrarii informatiei.
Parcurgerea:-in latime
-in adancime
c[1]:=vi;
viz[vi]:=true;
while p<=u do begin
vc:=c[p];
for i:=1 to n do
if a[vc,i]=1 and not viz(i) then
begin
u:=u+1;
c[u]:=i;
viz[i]:=true;
end;
p:=p+1;
end;
for i:=1 to n do write(c[i],' ');
readln;
end.
d_f(i);
CAPITOLUL II
Exemplul2:
Definitie: Se numeste ciclu eulerian intr-un graf, un ciclu care contine toate
muchiile grafului.
Definitie: Se numeste graf eulerian, un graf care contine un ciclu eulerian.
Exemplul1:
Exemplul 2:
Pentru acest graf, ciclu C = [2,1,5,2,3,4,2] este eulerian, deoarece pleaca din
2 si se intoarce tot in doi, iar muchiile sale consecutive, adica [2,1], [1,5], [5,2],
[2,3], [3,4], [4,2] sunt distincte doua cate doua si reprezinta toate muchiile grafului.
Teorema: Un graf fara varfuri izolate este eulerian, daca si numai daca este
conex si gradele tuturor varfurilor sunt numere pare.
Demonstratie
Fie un graf fara varfuri izolate care contine un ciclu eulerian (graf eulerian).
Demonstram ca graful este conex si gradele tuturor varfurilor sale sunt pare.
a) Graful este conex. Fie x si y doua varfuri ale grafului. Cum x nu este
izolat, rezulta ca exista o muchie incidenta lui x. Tot asa, exista o muchie
incidenta cu y. Cum ciclul este eulerian (contine toate muchiile) va
contine si cele doua muchii. Prin urmare, x si y sunt unite printr-un
lant.Cum x si y au fost alese intamplator, rezulta ca oricare duoa varfuri
sunt unite printr-un lant.In concluzie, graful este conex.
b) Gradele tuturor muchiilor sunt pare. Sa presupunem ca varful x apare de
k ori in lant. La fiecare aparitie a lui x , se vom d(x)=2k. Cum varful x a
fost luat arbitrar, rezulta ceea ce trebuia demonstrat.
Sa presupunem ca graful G este conex si are gradele tuturor varfurilor numere
pare.Sa aratam ca G contine un ciclu eulerian.
Pornim cu unul din varfurile grafului . Fie el v. Intentionam sa formam un ciclu
, care incepe si se termina cu v.Conform ipotezei,exista un numar par de muchii
incidente cu v. Selectam una dintre ele incidenta la varful v1.Atat in v cat si in v1
raman cu un numar impar de muchii incidente. Selectam, o muchie incidenta la v1
si repetam rationamentul. Multimea varfurilor este finita. In concluzie, vom
ajunge, la un moment dat , intr-unul din varfurile prin care am trecut. Daca acesta
este chiar v am obtinut ciclul cautat. Sa presupunem ca am ajuns intr-un alt varf
decat v. Tinand cont de algoritm au fost selectate un numar par de muchii incidente
acestuia. Prin urmare, exista o muchie pe care o putem selecta. Porcesul se repeta
pana cand selectam o muchie incidenta la v.
In acest caz am gasit un ciclu care incepe si se termina in v. Il notam cu " c"
.
Exista doua posibilitati:
1. Ciclul obtinut este eulerian, caz in care teorema este demonstrata.
2. Ciclul nu este eulerian. In acest caz, operam asupra grafului G, renuntand la
muchiile selectate.In acest fel, se obtine un graf partial al lui G pe care il
notam cu H.In acelasi timp, retinem ciclul gasit. Din analiza grafului H
rezulta:
Gradele tuturor varfurilor sale sunt pare ;
Multimea muchiilor lui H este nevida;
Cel putin una din muchiile lui H are o extremitate comuna (varf) cu una din
muchiile ciclului selectat;
Pornind dintr-un varf comun, selectam intocmai ca la inceput un alt ciclu c1.
Formam din c si c1 un nou ciclu .Extragem muchiile comune ciclului c1 si apoi
procedam in mod similar.
Repetam procedeul pana la selectia unui ciclu eulerian.