Documente Academic
Documente Profesional
Documente Cultură
Grafurile Orientate Si Neorientate
Grafurile Orientate Si Neorientate
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 +(=!( ,"), (",#), (#,$), ($, ), (#,%), (%,#), (%,&), (&,'), (',&), (',%)(.
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 ( ,").
.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
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
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
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.
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
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
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