Sunteți pe pagina 1din 10

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

Grafuri orientate noiuni de baz


Noiunea de graf orientat. Un exemplu de graf orientat este: reeaua de strzi a unui ora. Strzile sunt muchii n graf, iar interseciile reprezint vrfurile grafului. ntruct mergnd pe jos ne putem deplasa pe orice strad n ambele sensuri, vom spune c din punctul de vedere al pietonilor, graful unui ora este neorientat. Cu totul altfel stau lucrurile n ceea ce privete conductorii auto, pentru c n orice ora exist strzi cu sens unic. Pentru un ofer strzile trebuie s primeasc n graf o anumit orientare. Desigur c acele strzi pe care se poate circula n ambele sensuri vor primi orientare dubl. Am ajuns astfel la noiunea de graf orientat. Def. Numim graf orientat, o pereche ordonat de mulimi G=(X,U), unde: X este o mulime finit i nevid numit mulimea vrfurilor; U este o mulime format din perechi ordonate de elemente ale lui X, numit mulimea arcelor. observaii:
U1 1

U2 2 U3 U5 U4 3 U6 4 U7

Figura 1 Prin noiunea de perechi ordonate nu trebuie s nelegem c o muchie este mai mare dect alta, ci pur i simplu c facem deosebire ntre o muchie de forma (x,z) i o alta de forma (y,x). Cu alte cuvinte muchiile sunt difereniate prin ordinea de scriere a simbolurilor. Arcul (x,y) nu este tot una cu arcul (y,x). Exemplu: Pentru graful G=(X,U) din figura 1. avem: X={1, 2, 3, 4} i U={u1, u2, u3, u4, u5, u6, u7,}= {(1,1), (2,1), (3,2), (2,3), (2,4), (3,4), (3,4)} arc va fi de forma u= (x,y), unde x se numete extremitate iniial, iar y se numete extremitate final a arcului. Cu alte cuvinte, arcul iese din nodul x i intr n nodul y. La fel ca la grafurile neorientate, vom spune c nodurile x i y sunt adiacente, iar arcul u i nodul x sunt incidente (la fel arcul x i nodul y). Nodul y se numete succesor al lui x, iar nodul x se numete predecesor al lui y. Un arc de forma (x,x), care iese din nodul x i intr tot x, se numete bucl. Exemplu: 1

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

n graful din figura 1, avem bucla (1,1). ntr-un graf putem avea dou sau mai multe arce identice. Exemplu: n graful din figura 1, exist dou arce identice, u6 = u7 = (3,4) Definiie Se numete p-graf, un graf orientat n care numrul arcelor identice este mai mic sau egal cu o valoare dat p. n cele ce urmeaz vom analiza numai 1-grafuri fr bucle.

Gradul unui vrf. Mulimile i


Def.Gradul exterior al unui vrf x, notat d+(x), reprezint numrul arcelor care ies din nodul x, adic numrul arcelor de forma (x,z) U. Def. Gradul interior al unui vrf x, notat d- (x), ca fiind numrul arcelor care intr n nodul x (de forma (y,x) U). Exemplu: n graful reprezentat n figura 1, pentru nodul x=2, avem: d+(2) =3 exist trei arce care ies din nodul 2, i anume : u2=(2,1), u4=(2,3) i u5 = (2,4). d- (2) =1 n nodul 2 intr un singur arc, n spe arcul u3=(3,2).

Se mai definesc urmtoarele mulimi:

+ ( x ) = {y X ( x, y ) U } mulimea nodurilor ce constituie extremiti finale ale arcelor care pleac din
nodul x. Pe scurt, mulimea succesorilor lui x;

( x ) = {y X ( y, x ) U } mulimea nodurilor ce constituie extremiti iniiale ale arcelor care pleac din
nodul x. Pe scurt, mulimea predecesorilor lui x; Exemplu: n graful din figura 1, pentru nodul x=2, avem: - +(2) = {1,3,4} urmare a faptului c muchiile care pleac din nodul 2 sunt (2,1), (2,3) i (2,4), putem spune c mulimea succesorilor nodului 2 este {1,3,4}. - -(2) = {3} n nodul 2 intr doar muchia (3,2), deci mulimea predecesorilor lui 2 conine doar nodul 3. +(x) = {u = (x,y)| u U} mulimea arcelor care ies din nodul x; -(x) = {u = (y,x)| u U} mulimea arcelor care intr n nodul x; Exemplu: n graful din figura 1, pentru nodul 2, avem: +(x) = {(2,1), (2,3), (2,4)}, - (x) = {(3,2)}

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

Graf parial i subgraf


Def. Fie graful G = (X,U). Un graf parial al lui G, este un graf G1= (X,V), cu V U . Altfel spus, un graf parial G1 al lui G, este chiar G, sau se obine din G pstrnd toate vrfurile i suprimnd nite muchii. Def. Fie graful G = (X,U). Un subgraf al lui G, este un graf G1= (Y,T), unde V X i T U , iar T va conine numai muchiile care au ambele extremiti n Y. Altfel spus, un graf parial G1 al lui G, se obine din G eliminnd nite vrfuri i pstrnd doar acele muchii care au ambele extremiti n mulimea vrfurilor rmase.
Exemplu:

Se consider graful G = (X,U) din figura 2, n care X = {1,2,3,4,5,6} i U={u1, u2, u3, u4, u5, u6, u7}. Construim graful parial G1 = (X,V), unde X = {1,2,3,4,5,6} i V = { u2, u3, u4, u6, u7} (figura 3) din graful G au fost eliminate arcele u1 i u5. Construim subgraful G2 = (Y,T), unde Y = {3,4,5,6} i T = {u4, u5, u6, u7} (figura 4) din graful G au fost eliminate nodurile 1 i 2 precum i arcele u1, u2 i u3 care au o extremitate n afara mulimii nodurilor rmase.

Reprezentarea grafurilor orientate


u2 u1 u4 4 u7 6 Figura 2 u6 3 u3 u5 5 4 u7 u6 u4 3 5 4 u7 u6 u2 u3 u4 3 u5 5

6 Figura 3

6 Figura 4

Considerm un graf orientat G= (X,U) cu m arce i n noduri. Cele mai cunoscute forme de reprezentare sunt: matricea de adiacen, matricea vrfuri arce, matricea drumurilor i listele vecinilor. a.Matricea de adiacen Are aceeai semnificaie ca n cazul grafurilor neorientate: fiecare element a[i,j], cu i,j {1,2,...,n}, este: 1 dac exist arcul (i,j), respectiv 0 n caz contrar. Datorit orientrii, aa cum am mai spus, arcul (i,j) nu este totuna cu arcul (j,i). Prin urmare, a[i,j] a[j,i]. Aadar matricea de adiacen nu mai este simetric fa de diagonala principal, aa cum se ntmpla n cazul grafurilor neorientate.
Exemplu:

Pentru graful G=(X,U) din figura 5, matricea de adiacen este:

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

coloana

1 0

2 0 0 0 1 2 3

3 0 1 0 0

4 0 1 1 0 1 2 3 4

A=

1 0 0

1 4 Figura 5

b.Matricea vrfuri arce Este o matrice b cu n linii i m coloane, n care fiecare element b[i,j] este: 1, dac nodul i este o extremitate iniial a arcului uj; -1, dac nodul i este o extremitate final a arcului uj; 0, dac nodul i nu este o extremitate a arcului uj.

Exemplu: Pentru graful de mai jos cu n=4 noduri i m=5 arce, matricea vrfuri arce este: 1 -1 0 0 0 -1 1 0 2 u1 1 u4 4 u5 Figura 6 Pentru a exemplifica construcia matricei, vom deduce elementele liniei 3: a[3,1]= 0 pentru c nodul 3 nu este o extremitate a arcului u1. Analog, a[3,3]= 0 deoarece nodul 3 nu este extremitate a arcului u3. 4 u3 0 -1 0 1 0 0 1 -1 0 0 -1 1

u2 3

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

a[3,5]= -1 pentru c nodul 3 este o extremitate final a arcului u5. a[3,2]= 1 i a[3,4]= 1 ntruct nodul 3 este o extremitate iniial a arcului u2 respectiv u4. Observaii: Pe fiecare coloan j (aferent arcului uj), avem exact dou elemente nenule: un 1 (linia i pe care se afl

reprezint extremitatea iniial a arcului uj) i un -1 (linia i pe care se afl reprezint extremitatea final a arcului uj) Numrul valorilor de 1 de pe linia i, reprezint gradul exterior al nodului i (numrul arcelor ce au ca extremitate iniial pe i), iar numrul valorilor de -1 de pe linia i reprezint gradul interior al nodului i (numrul arcelor care au ca extremitate final pe i). c.Listele vecinilor Pentru fiecare nod x se construiesc dou liste ale vecinilor si: L*(x) lista vecinilor succesori; conine nodurile ce sunt extremiti finale ale arcelor care ies din nodul x. L-(x) lista vecinilor predecesori; conine nodurile ce sunt extremiti iniiale ale arcelor care intr n nodul x. Exemplu: n graful din figura 6 de mai sus, pentru nodul x=4 avem: arcele care ies din nodul 4 sunt (4,2) i (4,3). n consecin, lista vecinilor succesori L+(4) conine nodurile 2 i 3; n nodul 4 intr un singur arc, i anume (3,4), motiv pentru care lista vecinilor predecesori L-(4) conine doar nodul 3. Prezentm n continuare aceste liste ale vecinilor pentru graful din figura 6. Nodul x 1 2 3 4 d.Matricea drumurilor Aceast matrice va fi reprezentat n cadrul capitolului Drumuri i circuite n grafuri orientate. e.Reprezentarea grafului ca un vector de muchii Fiecare arc al grafului poate fi privit ca o nregistrare cu dou componente, n spe cele dou noduri care constituie extremitile arcului: nod_in -> nodul din care iese arcul (nodul de nceput al arcului); nod_sf -> nodul n care intr arcul (nodul de sfrit al arcului); Putem defini tipul de date ARC, astfel: struct ARC { int nod_in, nod_sf; } 5 L+(x) 2 vid 2,4 2,3 L-(x) vid 1,3,4 4 3

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

Graful n ansamblul su, este o mulime de arce, adic o mulime de elemente de tipul ARC. n consecin, definim graful ca un vector de arce, adic un vector de elemente de tipul ARC: ARC v[25] ; Numrul real de elemente este numrul de arce m. Astfel, elementele efectiv folosite ale vectorului vor fi v[1], v[2],..., v[m]. Fiecare element {1, 2, ..., m}) este de tipul ARC i reprezint un v[i] (cu i arc al grafului, avnd dou componente: v[i].nod_in i v[i].nod_sf -> nodurile extremiti ale arcului.

Drumuri si circuite in grafuri orientate


Def. Se numete lan intr-un graf orientat, o mulime de arce L={u1,u2,...,uk}, cu proprietatea ca oricare doua arce vecine in mulime au o extremitate comuna. Un lan este de fapt un traseu care unete prin arce doua noduri numite extremitile lanului, fr a tine cont de orientarea arcelor componente. Def. Se numete drum n graful G=(X,U), un ir de noduri D={z1, z2, z3, , zk}, unde z1, z2, z3, , zk aparin lui X, cu proprietatea c oricare dou noduri consecutive sunt adiacente, adic exist arcele [z1, z2], [z2, z3], , [zk-1,zk] aparin lui U. Obs. Practic, un drum poate fi privit ca un traseu n care toate arcele au aceeai orientare, dat de sensul de deplasare de la z1 la zk. Def. Dac nodurile z1, z2, z3, , zk sunt distincte dou cte dou, drumul se numete elementar. n caz contrar, drumul este ne-elementar. Asemenea uni lan ntr-un graf neorientat, un drum ntr-un graf orientat este de fapt un traseu pe care l-am parcurge ntre dou noduri deplasndu-ne de-a lungul unor arce i trecnd prin nite noduri intermediare. Deosebirea unui drum fa de un lan const n faptul c de-a lungul unui arc ne putem deplasa numai n sensul dat de orientarea arcului. Def. Se numete circuit ntr-un graf, un lan L={z1, z2, z3, , zk} cu proprietatea c z1=zk i arcele [z1, z2],

[z2, z3], , [zk-1,zk] sunt distincte dou cte dou. Def. Dac ntr-un circuit, toate nodurile cu excepia primului i ultimului sunt distincte dou cte dou,

atunci circuitul se numete elementar. n caz contrar, el este ne-elementar. u2 u1 u4 4 u7 6 Figura 8 6 u6 3 u3 u5 5

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

Reluare notiune : Matricea drumurilor. Este o matrice d cu n linii i n coloane, n care fiecare element d[i,j] este : 1, dac exist drum de la nodul i la nodul j n graf; 0, n caz contrar. Algoritmul Roy-Warshall de determinare a matricei drumurilor Matricea drumurilor se obine aplicnd matricei de adiacen transformri succesive. Vom spune c exist drum de la nodul i la nodul j, dac gsim un nod k (diferit de i, j) cu proprietatea c exist drum de la i la k i drum de la j la k. Astfel: un element a[i, j] care este 0, devine 1, dac exist un nod k astfel nct a[i, k]=1 i a[k, j]=1. Pentru a gsi arcele nodului k, trebuie parcurse pe rnd n varianta k toate nodurile 1, 2, , n. for (k=1;k<= n;k++) for( i=1;i<=n;n++) // ik for( j=1;j<=n;j++) // jk if (a[i, j]==0) && i != k && j != k) a[i, j]=a[i,k]*a[k, j]; Atribuirea a[i, j]=a[i,k]*a[k, j] este o scriere elegant a regulii de mai sus: n cazul n care unul din elementele a[i,k], a[k, j] este 0, a[i, j] va rmne 0; dac a[i, k]=1 i a [k, j]=1, atunci a[i, j] devine 1.

Conexitate in grafuri orientate


Def. Un graf G este conex, daca oricare ar fi doua varfuri ale sale, exista un lant care le leaga. Def. Un lant intr-un graf orientat este un sir de arce {u1, u 2, u3 , , un} cu proprietatea ca oricare doua arce consecutive au o extremitate comuna. Altfel spus, un lant este un traseu care uneste prin arce doua noduri numite extremitatile lantului, fara a tine cont de orientarea arcelor componente. Exemplu

Graful este conex pentru ca oricum am lua doua noduri putem ajunge de la unul la celalalt pe un traseu de tip lant. De exemplu, de la nodul 4 la nodul 2 putem ajunge pe traseul de noduri (4,3,2) stabilind astfel lantul {u5, u3}, dar si pe traseul de noduri (4,1,2) stabilind lantul {u6, u2} 7

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

Acest graf nu este conex. Luand submultimea de noduri {1,2,3}, putem spune ca intre oricare doua noduri din aceasta submultime exista cel putin un lant., de exemplu lantul {u1, u2} sau {u3, u1}. La fel stau lucrurile cu submultimea de noduri {4,5,6}. Dar nu ptuem gasi un lant intre un nod din prima submultime si un nod din a doua submultime. Plecand dintr-un nod al primei submultimi si deplasandu-ne pe arce, nu avem cum sa trecem in a doua submultime pentru ca nu exista nici un arc direct care sa lege cele doua submultimi. De exemplu plecand din nodul 1 putem ajunge in nodul 2 pe traseul {u3, u2}, dar de aici nu putem ajunge mai departe in nodul 4, deci nu exista lant de la 2 la 4.

Componenta conexa
Def. Componenta conexa a unui graf G=(X, U), reprezinta un subgraf G1=(X1, U1) conex, a lui G, cu proprietatea ca nu exista nici un lant care sa lege un nod din X 1 cu un nod din X-X 1 (pentru orice nod, nu exista un lant intre acel nod si nodurile care nu fac parte din subgraf). De exemplu graful din fig. 3 nu este conex , insa in el distingem doua componente conexe: G1 =(X1, U1), unde X1={1,2,3} si U1={u1, u2, u3}; si G2=(X2, U2), unde X2={4,5,6} si U2={u4, u5}.

Graf tare conex


Def. Graful tare conex este un graf orientat G=(X, U), daca pentru oricare doua noduri x si y apartin lui X, exista un drum de la x la y precum si un drum de la y la x. Exemplu:

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

Graful cu n=3 din fig. 4 este tare conex. Pentru a demonstra acest lucru, formam toate perechile posibile de noduri distincte (x, y) cu x, y apartin multimii {1,2,3}, si pentru fiecare astfel de pereche cautam un drum de la x la y si un drum de la y la x. x=1, y=2 De la 1 la 2 drumul [1,3,2], pe arcele (1,3) si (3,2); De la 2 la 1 drumul [2,3,1], pe arcele (2,3) si (3,1). x=1, y=3 De la 1 la 3 drumul [1,2,3], pe arcele (1,2) si (2,3); De la 3 la 1 drumul [3,2,1], pe arcele (3,2) si (2,1). x=2, y=3 De la 2 la 3 drumul [2,1,3], pe arcele (2,1) si (1,3); De la 3 la 2 drumul [3,1,2], pe arcele (3,1) si (1,2).

Componenta tare conexa


Un subgraf se obtine dintr-un graf G= (X, U) eliminand niste varfuri si pastrand doar acele muchii care au ambele extremitati in multimea varfurilor ramase. Def. Fie un subgraf tare conex G1=(X1, U1) al grafului G=(X, U). Adaugam la subgraf un nod x care nu face parte din multimea nodurilor sale (x apartine X-X1). Obtinem astfel multimea de varfuri X1 reunit cu {x}. Subgraful indus pe multimea X1 reunit cu {x} se obtine luand si arcele care trec prin nodul x. Daca acest subgraf nu mai este tare conex, atunci el se numeste componenta tare conexa. Exemplu:

Acesta este graful G=(X,U) tare conex. Din el eliminam nodul 4.

Am obtinut astfel subgraful tare conex G1=(X1, U1). Acestui graf ii adaugam un nod x care nu face parte din multimea nodurilor subgrafului G1. Graful obtinut este componenta tare conexa. 9

Limbajului C++ - Suport de curs pentru clasele 9-11, profil matematica-informatica

prof.informatica Gabriela Gligor

Problema Stabiliti daca graful de mai jos este sau nu conex.

X= {1, 2, 3, 4, 5}; U= {u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, u13, u14, u15, u16}={(1,2), (2,1), (3,2), (2,3), (4,3), (3,4), (1,4), (4,1), (2,5), (5,2), (3,5), (5,3), (4,5), (5,4), (1,5), (5,1)}. De la 1 la 2 pe drumul [1,5,2] sau [1,5,4,3,2], etc. De la 1 la 3 pe drumul [1,5,3] sau [1,5,2,3], etc. De la 1 la 4 pe drumul [1,5,4] sau [1,5,2,3,4], etc. De la 1 la 5 pe drumul [1,2,5] sau [1,4,5], etc. De la 2 la 3 pe drumul [2,5,3] sau [2,1,5,3],etc. De la 2 la 4 pe drumul [2,5,4] sau [2,3,5,4], etc. De la 2 la 5 pe drumul [2,1,5] sau [2,3,5], etc. De la 3 la 4 pe drumul [ 3,5,4] sau [3,2,5,4], etc. De la 3 la 5 pe drumul [3,2,5] sau [3,4,5], etc. De la 4 la 5 pe drumul [4,1,5] sau [4,3,5], etc.

10

S-ar putea să vă placă și