Sunteți pe pagina 1din 20

Grafurile

Graf orientat
Un graf orientat reprezinta o pereche ordonata de multimi G=(X,U), unde X este o multime finita si nevida, numita multimea nodurilor, si U este o multime formata din perechi ordonate de elemente ale lui X, numita multimea arcelor. Exemplu

In graful din fig. multimea nodurilor este X=! , ", #, $, %, &, '( si multimea arcelor este U=!u , u", u#, u$, u%, u&, u', u), u*, u +(=!( ,"), (",#), (#,$), ($, ), (#,%), (%,#), (%,&), (&,'), (',&), (',%)(.

Conexitate in grafuri orientate


Un graf G este conex, daca oricare ar fi doua varfuri ale sale, exista un lant care le leaga. Un lant intr,un graf orientat este un sir de arce !u , u ", u# , -, un( cu proprietatea ca oricare doua arce consecutive au o extremitate comuna. .ltfel 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 a/unge de la unul la celalalt pe un traseu de tip lant. 0e exemplu, de la nodul $ la nodul " putem a/unge pe traseul de noduri ($,#,") sta1ilind astfel lantul !u%, u#(, dar si pe traseul de noduri ($, ,") sta1ilind lantul !u &, u"(

.cest graf nu este conex. 2uand su1multimea de noduri ! ,",#(, putem spune ca intre oricare doua noduri din aceasta su1multime exista cel putin un lant., de exemplu lantul !u , u"( sau !u#, u (. 2a fel stau lucrurile cu su1multimea de noduri !$,%,&(. 0ar nu ptuem gasi un lant intre un nod din prima su1multime si un nod din a doua su1multime. 3lecand dintr,un nod al primei su1multimi si deplasandu,ne pe arce, nu avem cum sa trecem in a doua su1multime pentru ca nu exista nici un arc direct care sa lege cele doua su1multimi. 0e exemplu plecand din nodul putem a/unge in nodul " pe traseul !u #, u"(, dar de aici nu putem a/unge mai departe in nodul $, deci nu exista lant de la " la $.

Componenta conexa
Componenta conexa a unui graf G=(X, U), reprezinta un su1graf G =(X , U ) conex, a lui G, cu proprietatea ca nu exista nici un lant care sa lege un nod din X cu un nod din X,X (pentru orice nod, nu exista un lant intre acel nod si nodurile care nu fac parte din su1graf). 0e exemplu graful din fig. # nu este conex , insa in el distingem doua componente conexe4 G =(X , U ), unde X =! ,",#( si U =!u , u", u#(5 si G"=(X", U"), unde X"=!$,%,&( si U"=!u$, u%(. Graf tare conex Graful tare conex este un graf orientat G=(X, U), daca pentru oricare doua noduri x si 6 apartin lui X, exista un drum de la x la 6 precum si un drum de la 6 la x. Exemplu

Graful cu n=# din fig. $ este tare conex. 3entru a demonstra acest lucru, formam toate perechile posi1ile de noduri distincte (x, 6) cu x, 6 apartin multimii ! ,",#(, si pentru fiecare astfel de pereche cautam un drum de la x la 6 si un drum de la 6 la x. x= , 6=" 0e la la " 7 drumul 8 ,#,"9, pe arcele ( ,#) si (#,")5 0e la " la 7 drumul 8",#, 9, pe arcele (",#) si (#, ). x= , 6=# 0e la la # 7 drumul 8 ,",#9, pe arcele ( ,") si (",#)5 0e la # la 7 drumul 8#,", 9, pe arcele (#,") si (", ). x=", 6=# 0e la " la # 7 drumul 8", ,#9, pe arcele (", ) si ( ,#)5 0e la # la " 7 drumul 8#, ,"9, pe arcele (#, ) si ( ,").

Componenta tare conexa


Un su1graf se o1tine dintr,un graf G= (X, U) eliminand niste varfuri si pastrand doar acele muchii care au am1ele extremitati in multimea varfurilor ramase. :ie un su1graf tare conex G =(X , U ) al grafului G=(X, U). .daugam la su1graf un nod x care nu face parte din multimea nodurilor sale (x apartine X,X ). ;1tinem astfel multimea de varfuri X reunit cu !x(. <u1graful indus pe multimea X reunit cu !x( se o1tine luand si arcele care trec prin nodul x. 0aca acest su1grafnu 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.

.m o1tinut astfel su1graful tare conex G =(X , U ). .cestui graf ii adaugam un nod x care nu face parte din multimea nodurilor su1grafului G . Graful o1tinut este componenta tare conexa.

3ro1lema
<ta1iliti daca graful de mai /os este sau nu conex.

X= ! , ", #, $, %(5 U= !u , u", u#, u$, u%, u&, u', u), u*, u +, u , u ", u #, u $, u %, u &(=!( ,"), (", ), (#,"), (",#), ($,#), (#,$), ( ,$), ($, ), (",%), (%,"), (#,%), (%,#), ($,%), (%,$), ( ,%), (%, )(. 0e la 0e la 0e la 0e la la " 7 pe drumul 8 la # 7 pe drumul 8 la $ 7 pe drumul 8 la % 7 pe drumul 8 ,%,"9 sau 8 ,%,#9 sau 8 ,%,$9 sau 8 ,",%9 sau 8 ,%,$,#,"9, etc. ,%,",#9, etc. ,%,",#,$9, etc. ,$,%9, etc.

0e la " la # 7 pe drumul 8",%,#9 sau 8", ,%,#9,etc. 0e la " la $ 7 pe drumul 8",%,$9 sau 8",#,%,$9, etc. 0e la " la % 7 pe drumul 8", ,%9 sau 8",#,%9, etc. 0e la # la $ 7 pe drumul 8 #,%,$9 sau 8#,",%,$9, etc. 0e la # la % 7 pe drumul 8#,",%9 sau 8#,$,%9, etc. 0e la $ la % 7 pe drumul 8$, ,%9 sau 8$,#,%9, etc.

Grafuri neorientate

Graf = orice mulime finit V prevzut cu o relaie binar intern E. Notm graful cu G=(V, E). Graf neorientat = un graf G=(V, E) n care relaia binar este simetric: (v,w) E atunci (w,v) E. Nod = element al mulimii V, unde G=(V, E) este un graf neorientat. Muchie = element al mulimii E ce descrie o relaie existent ntre dou vrfuri din V, unde G=(V, E) este un graf neorientat;
1 6 5 3 4

In figura alaturata: V={1,2,3,4,5,6} sunt noduri E={[1,2], [1,4], [2,3],[3,4],[3,5]} sunt muc ii !=(V, E)="{1,2,3,4,5,6}, {[1,2], [1,4], [2,3],[3,4], [3,5]}#

Adiacenta: ntr!un graf neorientat existena muc"iei (v,w) presupune c w este adiacent cu v #i v adiacent cu w. n exemplul din figura de mai sus vrful 1 este adiacent cu 4 dar 1 #i 3 nu reprezint o perec"e de vrfuri adiacente. Inciden = o muc"ie este incident cu un nod dac l are pe acesta ca extremitate. $uc"ia (v,w) este incident n nodul v respectiv w. Grad = %radul unui nod v, dintr!un graf neorientat, este un numr natural ce reprezint numrul de noduri adiacente cu acesta &sau numarul de muc"ii incidente cu nodul respectiv' Nod izolat = (n nod cu gradul 0. Nod terminal= un nod cu gradul 1

6 5 3 4

Nodul 5 este terminal &gradul 1'. Nodul 6 este izolat &gradul 0' Nodurile 1, 2, 4 au gradele egale cu 2.

Lan = este o secven de noduri ale unui graf neorientat G=(V,E), cu proprietatea c oricare dou noduri consecutive din lant sunt adiacente: L=[w1, w2, w3,. . ,wn] cu proprietatea c (wi, wi+1) E pentru 1 i<n. Lungimea unui lan = numrul de muc"ii din care este format. Lan simplu = lanul care conine numai muchii distincte Lan compus= lanul care nu este format numai din muc"ii distincte Lan elementar = lanul care conine numai noduri distincte Ciclu = (n lan n care primul nod coincide cu ultimul. Ciclul este elementar dac este format doar din noduri distincte, excepie fcnd primul #i ultimul. )ungimea unui ciclu nu poate fi *. +uccesiunea de vrfuri 2, 3, 5, 6 1 6 reprezint un lan simplu #i elementar de lungime 3. 5 )anul 5 3 4 5 6 este simplu dar nu 2 este elementar. 3 4 )anul 5 3 4 5 3 2 este compus #i nu este elementar. )anul 3 4 5 3 reprezint un ciclu elementar Graf partial = ,ac dintr!un graf G=(V,E) se suprim cel puin o muc"ie atunci noul graf G=(V,E), E E se nume#te graf parial al lui G.
1 6 5 3 4 1 6 5 3 4

G1 este graf partial al lui %

Su graf = ,ac dintr!un graf G=(V,E) se suprim cel puin un nod mpreun cu muc"iile incidente lui, atunci noul graf G=(V,E), E E si V V se nume#te subgraf al lui G.
1 6 5 3 4 6 5 3

G1 este graf partial al lui %

Graf regulat = graf neorientat n care toate nodurile au acela#i grad;

6 5 3 4

Graf complet = graf neorientat G=(V,E) n care exist muc"ie ntre oricare dou noduri. Numrul de muc"ii ale unui graf complet este: nr*(nr-1)/2.Unde nr este numarul de noduri
1

graf complet! Nr de noduri: -x&-!.'/* = 0 Graf cone" = graf neorientat G=(V,E) n care pentru orice perec"e de noduri (v,w) exist un lan care le une#te.
1 6 5 3 4
1 6 5 3 4

graf cone" nu este graf cone" Component cone" = subgraf al grafului de referin, maximal n raport cu proprietatea de conexitate &ntre oricare dou vrfuri exist lan';

6 5 3 4

graful nu este cone"! 1re * componente conexe: ., * si 2, -, 3, 0 Lan hamiltonian = un lan elementar care conine toate nodurile unui graf
1 6 5 3 4

L=#$ %1% &% '% (% )* este lant hamiltonian Ciclu hamiltonian = un ciclu elementar care conine toate nodurile grafului

6 5 3 4

C=#1%$%)%(%'%&%1* este ciclu hamiltonian

Graf hamiltonian = un graf % care conine un ciclu "amiltonian %raful anterior este graf 4amiltonian. Lan eulerian = un lan simplu care conine toate muc"iile unui graf
1 6 5 3 4

)antul: )=5..*.2.-.3.2.0.*.3.06 este lant eulerian Ciclu eulerian = un ciclu simplu care conine toate muc"iile grafului 7iclul: 7=5..*.2.-.3.2.0.*.3.0..6 este ciclu eulerian

Graf eulerian = un graf care conine un ciclu eulerian. Condiie necesar i suficient: (n graf este eulerian dac #i numai dac oricare vrf al su are gradul par.

Reprezentarea grafurilor neorientate


Fie G=(V, E) un graf neorientat. Exista mai multe modalitati de reprezentare pentru un graf neorientat, folosind diverse tipuri de structuri de date. Reprezentarile vor fi utilizate in diversi algoritmi si in programele care implementeaza pe calculator acesti algoritmi. Matricea de adiacent matricea boolean Matricea de adiacent asociat$ unui graf n%ori%ntat d%fin%st% astf%l: & = "ai '# n ( n cu 1, daca [i,j]E a[i,j]= ), altf%l Observatii: - * +atric%a d% adiac%nta asociat$ unui graf n%ori%ntat %st% o matric% sim%tric$ - * ,uma %l%m%nt%lor d% -% linia . r%-r%/int$ gradul nodului . - * ,uma %l%m%nt%lor d% -% coloana . r%-r%/int$ gradul nodului . 0i% graful din figura urmatoar%: cu n noduri s%

6 5 3 4

&=

) 1 ) 1 ) ) nodul 1 ar% gradul 2 1 ) 1 ) ) ) nodul 2 ar% gradul 2 ) 1 ) 1 1 ) nodul 3 ar% gradul 3 1 ) 1 ) ) ) nodul 4 ar% gradul 2 ) ) 1 ) ) ) nodul 5 ar% gradul 1 ) ) ) ) ) ) nodul

6 ar% gradul ) 1umarul d% noduri %st% 6 si numarul d% muc ii %st% 4 +atric%a %st% sim%trica si -atratica a2and 6 linii si 6 coloan% 3iagonala -rinci-ala contin% numai 2alori nul% 4%ntru a -r%lucra graful s% cit%sc: 6* r%-r%/%ntand n, numarul d% noduri 4* r%-r%/%ntand m, numarul d% muc ii 4 -%r%c i (*5 r%-r%/%ntand %(tr%mitatil% c%lor 4 muc ii: 1*2 =6 a[1,2]=a[2,1]=1 1*4 =6 a[1,4]=a[4,1]=1 2*3 =6 a[2,3]=a[3,2]=1 3*4=6 a[3,4]=a[4,3]=1 3*5 =6 a[3,5]=a[5,3]=1 4ro7l%m% -ro-us%: +ro lema 1 ,% cit%st% un graf din fisi%rul graf8t(t: numarul d% noduri, numarul d% muc ii si muc iil%8 a# sa s% afis%/% matric%a d% adiac%nt% 7# ,a s% d%t%rmin% gradul unui nod citit c# ,a s% afis%/% -%ntru un nod citit noduril% adiac%nt% d# sa s% afis%/% noduril% incid%nt% cu c%a d% a ( muc i% din matric% %# sa s% afis%/% -%ntru fi%car% nod gradul f# sa s% afis%/% nodul "noduril%# a2and c%i mai multi 2%cini g# sa s% afis%/% noduril% i/olat% +ro lema $ ,a s% d%t daca o matric% citita dintr*un fisi%r -oat% fi matric%a unui graf n%ori%ntat8 In ca/ afirmati2 s% 2a d%t%rmina cat% muc ii ar% graful roblema !

,a s% g%n%r%/% un graf a2and ma(im n noduri si ma(im m muc ii8 ,a s% afis%/% matric%a atasata 97s%r2ati%: graful nu -oat% fi d%cat c%l mult com-l%t

:ist%l% d% adiac%nta a nodurilor


;%-r%/%ntar%a in calculator a unui graf s% -oat% fac% utili/and list%l% d% adiac%nta a 2arfurilor, adica -%ntru fi%car% 2arf s% alcatui%st% lista 2arfurilor adiac%nt% cu %l8 0i% graful din figura urmatoar%:
1 6 5 3 4

Lista ,ecinilor nodului )- $% (% ' &noduri adiacente'


1 6 5 3 4

1odul 6 nu ar% 2%cini "%st% i/olat# 4%ntru intr%g graful 2om a2%a mai mult% list% : 1odul 1 : 2 4 1odul 2 : 1 1odul 3 : 2 1odul 4 : 1odul 5 :
1 3 3 4 3 5

9rdin%a nodurilor in cadrul un%i list% nu %st% im-ortanta 4%ntru a g%n%ra o astf%l d% lista 2om d%fini ti-ul nod : struct nod "int nd# nod $next#%# <oat% list%l% s% 2or m%mora utili/and un 2%ctor d% list% : nod $&'()*# 3at%l% d% intrar% : numarul d% noduri si muc iil% s% 2or citi din fisi%r : 9 soluti% d% im-l%m%ntar% %st% urmatoar%a : =includ%>conio8 6 =includ%>fstr%am8 6 struct nod {int nd? nod @n%(t?}? nod @:[2)]? 2oid afisar%"int nrAnod# //afiseaza lista vecinilor nodului nr_nod {nod @-=:[nrAnod]? if"-==)# cout>>nrAnod>>B %st% i/olat B>>%ndl? %ls% {cout>>Blista 2%cinilor lui B>>nrAnod>>%ndl? nod @c=-? C il%"c# {cout>>c*6nd>>B B? c=c*6n%(t?} cout>>%ndl?} } 2oid main"# {fstr%am f?int i,',n? nod @-,@D? f8o-%n"Bgraf8t(tB,ios::in#? //citirea datelor din fisier

clrscr"#? f66n? C il%"f66i66'# {-=n%C nod? EEs% adauga ' in lista 2%cinilor lui i -*6nd='? -*6n%(t=:[i]? :[i]=-? D=n%C nod? EEs% adauga i in lista 2%cinilor lui ' D*6nd=i? D*6n%(t=:[']? :[']=D? } f8clos%"#? cout>>%ndl>>Blist%l% d% adiac%nt% B? for"i=1?i>=n?iFF# afisar%"i#? g%tc "#? } +bser,atie : In %(%m-lul ant%rior adaugar%a unui nou %l%m%nt in lista s% fac% inaint% c%lorlalt% din lista cor%s-un/atoar%8 &c%st% doua moduri d% r%-r%/%ntar% "-rin matric% d% adiac%nta si -rin list% d% 2%cini# s% folos%sc du-a natura -ro7l%m%i8 &dica, daca in -ro7l%ma s% dor%st% un acc%s fr%c2%nt la muc ii, atunci s% 2a folosi matric%a d% adiac%nta? daca numarul d% muc ii car% s% r%-r%/inta %st% mult mai mic d%ct n(n, %st% d% -r%f%rat sa s% folos%sca list%l% d% adiac%nta, -%ntru a s% fac% %conomi% d% m%mori%8 4ro7l%m% -ro-us% : 18 18 ,a s% m%mor%/% un graf n%ori%ntat utili/and list% d% adiac%nt%8 4arcurgand list%l% d% adiac%nta r%/ol2ati urmatoar%l% c%rint% : a8 78 c8 d8 %8 a8 78 c8 d8 %8 ,a s% d%t%rmin% daca graful contin% noduri i/olat% ,a s% d%t%rmin% fradul unui nod citit d% la tastatura ,a s% d%t%rmin% nodul cu c%l mai mar% grad ,a s% d%t%rmin% daca noduril% ( si 5 sunt adiac%nt% ,a s% 2%rific% daca graful %st% r%gulat

f8 f8

,a s% d%t%rmin% daca graful %st% com-l%t

Componente conexe
0i% G=(V, E) un graf n%ori%ntat, und% V ar% n %l%m%nt% "n noduri# si E ar% m %l%m%nt% "m muc ii#8 Definitie- G1=(V1, E1)este o componenta conexa daca: * * pentru orice pereche x,y de noduri din V1 exista un lant de la x la y (implicit si de la y la x) * * nu exista alt su !ra" al lui #, #$=(V2, E2) care sa indeplineasca prima conditie si care sa%l contina pe G1
1 6 G 5 3 4

!raful alaturat ar% doua com-on%nt% con%(%: * * su7graful car% contin% noduril%: .(!4/ * * su7graful car% contin% noduril%: 01

97s%r2ati%: su7graful 1, 2, 3, 4 nu %st% com-on%nta con%(a -%ntru " c iar daca -%ntru oric% -%r%c % (,5 d% noduri %(ista un lant d% la ( la 5# d%oar%c% %(ista su7graful 1, 2, 3, 4, 5 car% il contin% si ind%-lin%st% ac%%asi conditi%8 Definitie- Hn graf !="V, E#%st% con%( daca -%ntru oric% -%r%c % (,5 d% noduri din V %(ista un lant d% la ( la 5 "im-licit si d% la 5 la (#8 +bser,atii* * Hn graf %st% con%( daca admit% o singura com-on%nta con%(a8

* * !raful ant%rior nu %st% con%( -%ntru ca admit% doua com-on%nt% con%(% !raful urmator %st% con%(:
1 6 G 5 3 4

4ro7l%m%: 18 18 0iind dat un graf m%morat -rin int%rm%diul matric%i d% adiac%nta sa s% d%t%rmin% daca graful %st% con%(8 28 28 0iind dat un graf m%morat -rin int%rm%diul matric%i d% adiac%nta si un nod . sa s% d%t%rmin% com-on%nta con%(a car%ia ii a-artin% nodul . 38 38 ,a s% afis%/% toat% com-on%nt%l% con%(% al% unui graf n%ori%ntat Indicatii : -In vectorul viz se incarca numarul componentei conexe astfel pentru graful urmator, vectorul viz va retine: viz=[1,1,1,1,2,1,2]. - umarul de componente conexe este !. -"e afiseaza componentele cu numarul componentei conexe egal cu #: 1,2,3,4,6 -"e afiseaza componentele cu numarul componentei conexe egal cu !: 5, 7
1

G 6

2 3 4

*Incarcar%a in 2i/ s% r%ali/%a/a -rin -arcurg%r% df -ornind d% la fi%car% nod *s% -orn%st% d% la 1, s% -arcurg% df si s% incarca in 2i/ 2aloar%a 1 -t noduril% 1, 2, 3, 4, 68 Vi/ d%2in%: 1,1,1,1,),1,)

*s% -orn%st% in continuar% d% la -rimul nod n%2i/itat, adica 5 si s% incarca numarul c%l%i d% a doa com-on%nt%, adica 2 Vi/ d%2in%: 1,1,1,1,2,1,2 - u mai sunt noduri nevizitate si algoritmul se inc$eie. Iata o soluti%: =includ%>fstr%am8 6 =includ%>conio8 6 int a[2)][2)],n,m,2i/[1))],gasit? int nrc? //pastreaza numarul componentei conexe 2oid dfmr"int nod# { 2i/[nod]=nrc? //se incarca numarul componentei for"int .=1?.>=n?.FF# if"a[nod][.]==1II2i/[.]==)# dfmr".#? } 2oid main"# {int (,5,'? fstr%am f? clrscr"#? f8o-%n"Bmuc ii8t(tB,ios::in#? //memorare matrice de adiacenta if"f# cout>>Bo.JB>>%ndl? %ls% cout>>B%roar% la d%sc id%r% d% fisi%rJB? f66n66m? for"int i=1?i>=m?iFF# {f66(665? a[(][5]=a[5][(]=1?} cout>>%ndl>>Bmatric%a d% adiac%nt%B>>%ndl? for%i=#&i'=n&i(() {for"'=1?'>=n?'FF# cout>>a[i][']>>B B? cout>>%ndl?} for"int nod=1?nod>=n?nodFF#

if"2i/[nod]==)# //se incearca parcurgerea numai daca un nod nu a fost deja parcurs {nrcFF? dfmr"nod#?} cout>>%ndl>>B2%ctorul 2i/ B>>%ndl? for"i=1?i>=n?iFF# cout>>2i/[i]>>B B? cout>>%ndl>>BKom-on%nt%l% con%(% :B>>%ndl? for"i=1?i>=nrc?iFF# {cout>>%ndl>>Bcom-on%nta B>>i>>%ndl? for"'=1?'>=n?'FF# if"2i/[']==i# cout>>'>>B B? } g%tc "#?}

2ibliografie
ro.wikipedia.org/wiki/Graf CCC8scri7d8comEdocE55G16L55EGrafuril%*+rientate*3i*4eorientate

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