Sunteți pe pagina 1din 16

Elemente de teoria grafurilor. Modaliti de memorare.

Parcurgerea n adncime i parcurgerea n lime


Grafurile pot fi aplicate cu succes pentru a modela probleme specifice analizei circuitelor electrice, gsirea celui mai scurt drum, analiza planificrii proiectelor, critica textelor literare, reele sociale, aplicaii din domeniul chimiei i economiei.

I.

Terminologie

Definiii: Se numete graf neorientat o pereche ordonat de mulimi G !", #$, unde% " &x ', x(, x), *, xn+este o mulime finit i ne,id de elemente numite noduri sau vrfuri, iar # o mulime finit de perechi neordonate de forma !x i, x-$, unde i- i xi, x-", numite muchii. . muchie unete dou noduri. " mulimea nodurilor sau vrfurilor, iar # mulimea muchiilor grafului G. #n vecin al unui ,/rf este orice ,/rf care este adiacent lui 0n graf. . muchie u# este deci o submulime &x, 1+ de ,/rfuri distincte din " i se noteaz u 2x, 13. x i 1 sunt adiacente 0n G, iar u i x sunt incidente la fel ca u i 1. x i 1 se numesc e tremitile muchiei u. 4ac u' i u( sunt ( muchii care au o extremitate comun, ele se numesc incidente. 5ulimea muchiilor are proprietatea de simetrie, deoarece 2x, 13 # dac i numai dac 21,x3#. E emplu% 6ie G !", #$, a.0. " &', (, ), 7, 8, 9, :, ;, <, '=, ''+, iar # &2', 83, 2), :3, 27, 93, 2<, ;3, 2'=, (3, 2', (3, 2<, 73, 2', '=3, 29, ;3+. 7 ' < '=

; 9 8 ( :

) Definiii: !radul unui vrf degree$.

'' este numrul muchiilor incidente cu x. Se noteaz cu d !x$ !d

"omputer #cience and Electrical Engineering Department Adrian FLOREA

#n ,/rf care are gradul = !deci pentru care nu exist ,reo muchie incident cu el$ se numete vrf i$olat. #n ,/rf care are gradul ' !deci care este incident cu o singur muchie$ se numete vrf terminal. E emplu% >entru graful G definit anterior, d !''$ =, deci ,/rful '' este izolat.

6ie un graf neorientat cu n noduri i m muchii. 4ac notm cu d', d(, d), *, dn gradele celor n noduri, atunci a,em relaia% d' ? d( ? d) ? * ? dn (m Definiii: Se numete lan @ 2x=, x', *, xn3o succesiune de ,/rfuri cu proprietatea c oricare dou ,/rfuri consecuti,e sunt adiacente. A/rfurile x= i xn se numesc e tremitile lanului. Bumrul n se numete lungimea lanului i este numrul de muchii din care este format. @anul care conine numai ,/rfuri distincte, dou c/te dou, este lan elementar. @anul care conine numai muchii distincte este lan %implu. 4ac muchiile unui lan nu sunt distincte se numete lan compu%. . matrice ptratic de ordin n se numete matricea lanurilor, dac% ', dac exist lan de la i la li,=, 0n caz contrar

E emplu: 6ie G !", #$, a.0. " &', (, ), 7, 8, 9+, iar # &2', (3, 2(, )3, 2), 73, 2), 83, 27, 83, 28, 93+. ' 9

( 8 ) 7

@anul (, ), 8, 9 este simplu i elementar de lungime ). @anul 8, ), 7, 8, 9 este simplu, dar nu este elementar de lungime 7. @anul 8, ), 7, 8, ), ( este compus i nu este elementar de lungime 8. Definiii: #n lan pentru care x= xn !primul nod coincide cu ultimul$ se numete ciclu. 4ac toate ,/rfurile unui ciclu, cu excepia primului i ultimului, sunt distincte, ciclul se numete elementar. @ungimea unui ciclu nu poate fi (. #n ciclu se numete par dac lungimea sa este par i impar 0n caz contrar. E emplu: Cn graful din figura anterioar lanul ), 7, 8, ) este un ciclu elementar impar. @anul (, 8, ), 7, 8, 9, ( este un ciclu par, dar nu este elementar. "omputer #cience and Electrical Engineering Department Adrian FLOREA

&&.

Tipuri de grafuri

4ac # atunci graful G !", #$ se numete graf nul, i reprezentarea lui 0n plan se reduce la puncte izolate. Definiie: #n graf parial al grafului G !", #$ este un graf G ' !", A$ a.0. A#, adic G' are aceeai mulime de ,/rfuri ca G iar mulimea de muchii A este chiar # sau o submulime a acesteia. #n graf parial al unui graf se obine pstr/nd aceeai mulime de ,/rfuri i elimin/nd o parte din muchii. Graful parial G' este indus de mulimea de muchii A. #n graf neorientat cu n noduri are ( m grafuri pariale i anume numrul de submulimi ale mulimii muchiilor &', (, *, m+, E emplu% >entru graful G definit anterior G' !", A$, unde A &2', 83, 27, 93, 2'=, (3+, este un graf parial. 7 ' '= <

; 9 8 ( : '' ) Definiie: #n %u'graf al grafului G !", #$ este un graf D !E, A$ a.0. E ", iar A conine toate muchiile din # care au ambele extremiti 0n E. Subgraful D este indus sau generat de mulimea de ,/rfuri E. E emplu% >entru graful G definit anterior, dac E &', (, ), :, '=+ i A &2', (3, 2', '=3, 2(, '=3, 2), :3+, atunci D !E, A$ este un subgraf al grafului G. ' '= :

) ( #n subgraf al unui graf se obine elimin/nd o parte din ,/rfuri i toate muchiile incidente cu acestea. #n graf neorientat cu n noduri are ( n ' subgrafuri i anume numrul de submulimi ale mulimii muchiilor &', (, *, n+, fr mulimea ,id deoarece mulimea nodurilor este ne,id.

"omputer #cience and Electrical Engineering Department Adrian FLOREA

Definiii: #n graf fr cilcuri se numete graf aciclic. #n graf aciclic i conex este un ar'ore. Cn cazul grafului aciclic fiecare component conex este un arbore. #n graf neorientat aciclic, care sFar putea s nu fie conex, se numete pdure. E emplu% Graful de mai -os este aciclic i formeaz o pdure. Gele ) componente conexe sunt arbori. 7 : ' < '=

; ( 9

Definiie: Se numete graf complet cu n ,/rfuri un graf cu proprietatea c oricare dou noduri distincte sunt adiacente. #n graf complet cu n ,/rfuri se noteaz Hn. E emplu% Graful definit mai -os este complet i se noteaz cu H8. (

'

CntrFun graf complet, gradul oricrui nod este n ( ), pentru c dinI0n fiecare nod pleacIsosesc n ( ) muchii. ( CntrFun graf complet, a,em relaia% m * n+n ( ),-. * C n !numrul de submulimi cu ( elemente ale mulimii celor n noduri$, unde m este numrul de muchii, iar n numrul de noduri. J,em ( n ! n '$ I ( grafuri neorientate cu n noduri. Definiie: #n graf G !", #$ se numete 'ipartit dac exist ( mulimi ne,ide J i K a.0. " J K, J K i orice muchie u a lui G are o extremitate 0n J iar cealalt 0n K. 5ulimile J i K formeaz o partiie a lui ". #n graf este 'ipartit dac i numai dac nu conine cicluri de lungime impar. E emplu% J &', ), 7+ i K & (, 8, 9, :+.

"omputer #cience and Electrical Engineering Department Adrian FLOREA

( '

) 9 7 : Definiie: #n graf 'ipartit se numete complet dac pentru xJ i 1K, 0n G muchia 2x, 13. Botaia este Hp,L unde p i L sunt elementele mulimii J i respecti, ale mulimii K. E emplu% H),7 este% 7 '

( 9 ) :

Definiie: #n graf 0n care toate nodurile au acelai grad se numete graf regulat. E emplu% Graful definit mai -os este regulat. ' 9

( 8 ) 7

Definiie: #n graf se numete graf cone dac pentru oricare dou ,/rfuri x i 1 diferite ale sale, exist un lan care le leag, adic x este extremitatea iniial i 1 este extremitatea final. #n graf cu un singur nod este, prin definiie, conex. Se numete component cone a unui graf G !",#$ un subgraf D !E, A$, conex, al lui G care are prorpietatea c nu exist nici un lan 0n G care s lege un ,/rf din E cu un ,/rf din " M E. #n graf este cone dac admite o singur componet conex. E emplu% Graful definit mai -os are o singur component conex i 0n consecin este conex.

"omputer #cience and Electrical Engineering Department Adrian FLOREA

'

( 8 ) 7

Definiie: #n graf este 'icone dac/ este conex i pentru orice ,/rf eliminat subgraful generat 0i pstreaz proprietatea de conexitate. E emplu% Graful definit mai -os este biconex. ' 9

( 8 ) 7

Definiii% #n multigraf seamn cu un graf neorientat, 0ns poate a,ea at/t muchii multiple 0ntre ,/rfuri c/t i autobucle. #n hipergraf seamn cu un graf neorientat, dar fiecare hipermuchie, 0n loc de a conecta dou ,/rfuri, conecteaz o submulime arbitrar de ,/rfuri. Definiie: "o%tul unui graf este o funcie definit pe mulimea muchiilor grafului cu ,alori 0n mulimea numerelor reale. #n graf notat cu o astfel de funcie este notat sub forma% ! * !", #, c$. E emplu% ! * !", #, c$. este graful% ' < ( 9 ) 7 8 8 ) 9

Definiie: Se numete ciclu hamiltonian un ciclu elementar care trece prin toate ,/rfurile grafului. #n graf care admite un ciclu hamiltonian se numete graf hamiltonian. 6ie G !",#$ un graf neorientat i un lan elementar care trece prin toate nodurile grafului 2x =, x', *, xn3. 4ac d!x'$ ? d!xn$Nn atunci graful este hamiltonian. 6ie G !",#$ un graf neorientat cu n noduri. 4ac pentru orice pereche de noduri neadiacente xix-, a,em relaia d!xi$ ? d!x-$Nn atunci graful este hamiltonian. "omputer #cience and Electrical Engineering Department Adrian FLOREA

4ac G !",#$ este un graf neorientat cu n noduri i gradul oricrui ,/rf este mai mare sau egal nI(, atunci G este hamiltonian. #n graf G este hamiltonian dac are nN) ,/rfuri i gradul oricrui ,/rf ,erific inegalitatea% d!x$NnI(. E emplu% ', (, ), <, ;, :, 8, 9, 7, ' este ciclu hamiltonian. ( ' ; 7 8 9 : ) <

Definiie: #n lan al unui graf care conine fiecare muchie o dat i numai o dat se numete lan eulerian. 4ac x= xn i lanul este eulerian atunci, ciclul respecti, se numete ciclu eulerian. #n graf care conine un ciclu eulerian se numete graf eulerian. 4ac este eulerian nu 0nseamn c nu are ,/rfuri izolate. E emplu% ', (, 7, 9, 8, :, ;, ), <, ;, 8, (, ), 7, ' este ciclu eulerian. ( ' ; 7 8 9 : ) <

#n graf G !",#$, fr ,/rfuri izolate, este eulerian dac i numai dac este conex i gradele tuturor ,/rfurilor sale sunt numere pare.

&&&.

MET/DE DE 0EP0E1E2T30E ). Matrice de adiacen


. matrice ptratic i simetric de ordin n, cu% ai,', pentru 2i, -3# =, pentru 2i, -3# "omputer #cience and Electrical Engineering Department Adrian FLOREA

Olementele de pe diagonala principal rein = i anume% ai,i =, i&', (, *, n+ Suma elementelor de pe linia i i respecti, suma elementelor de pe coloana 4 au ca rezultat gradul nodului i respecti, 4. Suma tuturor elementelor matricei de adiacen este suma gradelor tuturor nodurilor , adic dublul numrului de muchii !(m$. E emplu% 6ie graful G ' ( : < ; unci matricea lui de adiacen este% = = ' = = = = = = = = ' = = = = = = ' ' = ' ' = = = = = = ' = ' = = = = = = ' ' = = = = = = = = = = = ' ' = = = = = = ' = ' = = = = = = ' ' = ' = = = = = = = ' = 8 9 !", #$, de mai -os% at ) 7

(. 5i%te de adiacen definit dinamic >entru fiecare nod i, o list liniar simplu 0nlnuit ,a reine toate nodurile - pentru care 2i, -3#, adic lista succesorilor. 6iecare list simplu 0nlnuit conine nodurile 0n ordinea in,ers introducerii lor. E emplu% >entru graful definit la reprezentarea prin matrice de adiacen a,em% ' ( ) 7 8 9 : ; < ) ) ' 8 7 ; ; < ;

( ) ) : 9 9

8 J,em structurile urmtoare% struct Bod & int infoP Bod Q nextP + BodQ @28=3P

"omputer #cience and Electrical Engineering Department Adrian FLOREA

6. Matricea co%turilor 7. 5i%ta muchiilor &8. MET/DE DE P30"90!E0E

Parcurgerea n ltime %au pe nivele +:; < 'reath fir%t,


Se face 0ncep/nd de la un anumit nod, parcurgem apoi toi descendenii si, apoi toi descendenii nodurilor parcuse la pasul anterior, s.a.m.d. #n nod este parcurs o singur dat. Oxist mai multe soluii ale unei astfel de parcurgeri pentru c ordinea de parcurgere a desendenilor unui nod nu este impus, ea depinde i de modul 0n care a fost memorat graful. E emplu: >entru graful din figura de mai -os% ' ( 7 8

) :

ordinea de ,izitare a nodurilor este% ' ) 9 ( : 8 7 sau ' ( 9 ) 7 8 :. >arcurgerea :; se efectueaz prin utilizarea structurii numit coad, a,/nd gri- ca un nod s fie ,izitat o singur dat. Goada ,a fi alocat static prin utilizarea unui ,ector. Graful poate fi memorat prin matrice de adiacen, respecti, liste de adiacen.

Parcurgerea n adncime +D; < depth fir%t,


Se face 0ncep/nd de la un anumit nod, parcurgem apoi primul dintre descendenii si, neparcuri 0nc s.a.m.d. #n nod este parcurs o singur dat i aici exist mai multe soluii de parcurgere. E emplu: >entru graful din figura de mai -os% ' ( 7 8

) :

ordinea de ,izitare a nodurilor pornind de la nodul ' este% ' ( 7 8 ) 9 : sau ' ) : 9 ( 8 7. >arcurgerea D; se efectueaz recursi, graful put/nd fi memorat at/t prin matrice de adiacen c/t i liste de adiacen. "omputer #cience and Electrical Engineering Department Adrian FLOREA

A.

3P5&"3=&& "9 !03;90& 2E/0&E2T3TE

8.). Gunosc/nd i aplic/nd cele de mai sus realizai un program cu grafuri neorientate 0n care se citete dintrFun fiier pe c/te o linie separat numrul de noduri i perechile de noduri 0ntre care exista o muchie !li%t de muchii$P construii i afisai pe ecran matricea de adiacen. 8... Se consider un graf neorientat exprimat prin intermediul unei matrici de adiacen !analog cu cel din problema anterioar$. Scriei un program care calculeaz gradul fiecrui nod din graf, sorteaz descrescator i afieaz nodurile i gradele aferente. b$ Scriei un program care determin cte noduri %unt i$olate n graf i afieaz toate aceste noduri. c$ S se construiasc i s se afieze pentru fiecare nod din graf li%ta de adiacen definit dinamic. d$ S se ,erifice dac o sec,en de noduri citit de la tastatur !0ncheiat cu F'$ formeaz un lan n graf. e$ S se ,erifice dac o sec,en de noduri citit de la tastatur !0ncheiat cu F'$ formeaz un ciclu n graf. f$ Scriei un program care s ,erifice dac un graf este cone . 4ac graful nu este conex s se determine !i afieze$ componentele conexe ale grafului. g$ Scriei un program care s ,erifice dac un graf este eulerian). h$ Scriei un program care s ,erifice dac un graf este regulat. i$ Scriei un program care s ,erifice dac un graf este complet. -$ Realizai un o funcie care ,erific dac 0ntrFun graf neorientat, memorat cu a-utorul matricei de adiacen exist un ciclu elementar de lungime k +unde k este citit de la tastatur,. Graful conine n noduri !nS(8$. 5atricea de adiacen i numrul de noduri din graf ,or fi primite de subprogram prin intermediul parametrilor. 6uncia ,a 0ntoarce ' 0n caz afirmati, i =, 0n caz contrar. T$ Scriei un program care determin i afieaz cel mai lung lan i cel mai lung ciclu din graf. l$ Scriei un program care apeleaz dou funcii, i anume cele prin care se parcurge graful n lime i apoi 0n adncime. m$ Scriei un program care s ,erifice dac un graf este hamiltonian.
a$

Se folosete matricea de numere 0ntregi int A[100][100] i numrul de noduri n, ambele declarate global. 4e asemenea, sunt necesare trei ,ariabile a-uttoare declarate global% int vizitat[100],ordine[100],nr_comp; care rein informaii despre ,izitarea sau nu a unui nod din graf, despre ordinea de parcurgere a nodurilor Se ,or implementa urmtoarele funcii a,/nd prototipurile%
'

#n graf G !",#$, fr ,/rfuri izolate, este eulerian dac i numai dac este conex i gradele tuturor ,/rfurilor sale sunt numere pare. II/'%ervaie% graful poate fi eulerian i dac conine noduri izolate. 4ac un graf este compus '$ dintrFo component conex care este un subgraf conex cu gradele tuturor ,/rfurilor componente numere pare i ($ din noduri izolate, atunci graful este eulerian.

"omputer #cience and Electrical Engineering Department Adrian FLOREA

void citesteMA(char[100],int[100][100],int &); - citirea din fiierul primit ca parametru a li tei de muchii i tran formarea !n matrice de adiacen"# i o$"inerea num#rului de noduri al %rafului& void BFMatrix_subgraf(int nod); - parcur%erea !n l#"ime a unui u$%raf (a unei componente cone'e care include nodul primit ca parametru) void BFMatrix(); - parcur%erea pe nivele a %rafului void DFmatrix_subgraf(int); - parcur%erea !n ad(ncime a unui u$%raf (a unei componente cone'e care include nodul primit ca parametru) void DFmatrix(int); - parcur%erea !n ad(ncime a unui %raf& )olo ete func"ia DFmatrix_subgraf !n # trece la primul nod nevizitat !n cazul !n care %raful nu e cone'& int conex(); - verific# dac# un %raf e cone'& *ractic dac# la parcur%erea lui !n ad(ncime cu a+utorul DFmatrix_subgraf nu au mai r#ma noduri nevizitate& int comp_conexe(); - reprezint# o e'tindere a func"iei Dfmatrix care afieaz# num#rul componentei cone'e i nodurile apar"in#toare ace teia& void grad_toate(int ,A[100][100],int &noduri); - determin# %radele tuturor nodurilor din %raf& int grad_nod(int nod); - returneaz# %radul nodului primit ca parametru& void grad_max(int ,A[100][100],int &noduri); - calculeaz# %radul ma'im al nodurilor din %raf i afieaz# toate nodurile care au %rad ma'im& int Euler(); - determin# dac# un %raf e te eulerian i afieaz# un me a+ core punz#tor& void BFMatrix_subgraf(int nod)int .,root,prim, ultim; vizitat[nod]/1; prim/1; ultim/1; ordine[ultim00]/nod; cout11nod112 2; 3hile (prim 4/ ultim) root / ordine[prim]; for (. / 1; . 1/ n; .00) if (A[ordine[prim]][.] && (vizitat[.]//0)) vizitat[.] / 1; ordine[ultim00] / .; cout 11 . 11 2 2; 5 prim00; 5 "omputer #cience and Electrical Engineering Department Adrian FLOREA

void DFmatrix_subgraf(int nod)int .; cout11nod112 2; vizitat[nod]/1; for(./1;.1/n;.00) if((A[nod][.]//1)&&(vizitat[.]//0)) DFmatrix_subgraf(.); 5 30:/0& P30T&35& DE "/#T M&2&M 8.6. Realizai un program cu grafuri neorientate care implementeaz algoritmul lui Prim. Se citete dintrFun fiier pe c/te o linie separat numrul de noduri i perechile de noduri 0ntre care exista o muchie precum i costul aferent. Jlgoritmul lui >rim de complexitate patratica !.!n($$ este un algoritm din teoria grafurilor care gsete ar'orele parial de co%t minim al unui graf cone ponderat. a$ S se reprezentinte graful prin matricea costurilor b$ S se determine pornind de la un nod arbitrar submulimea muchiilor care formeaz un arbore care include toate ,/rfurile i al crui cost este minim. Jlgoritmul lui >rim se bazeaz pe tehnica !reed>( !Ua lacomuluiV M alegerea soluiei optime local$ i urmrete s realizeze un arbore !graful s nu aib cicluri$ increment/nd mrimea arborelui, pornind de la un nod, p/n c/nd sunt incluse toate nodurile. Iniial se pleac de la un arbore format dintrFun singur ,/rf !ales arbitrar$. @a fiecare pas se selecteaz muchia cu costul minim pornind din respecti,ul ,/rf i care s duc 0ntrFun nod neselectat anterior. Wrebuie ca mulimea Onou a muchiilor selectate i mulimea Anou a ,/rfurilor unite de acestea s formeze un arbore. &ntrare: #n graf conex ponderat cu mulimea nodurilor A i a muchiilor O. &eire% Anou i Onou descriu arborele parial de cost minim
(1) (2)

&nitiali$are: Anou &x+, unde x este un nod arbitrar !punct de plecare$ din A, Onou &+ repet pn cnd Anou A (3) Jlege muchia !u,,$ din O de cost minim astfel 0nc/t u este 0n Anou i , nu e !dac exist mai multe astfel de muchii, se alege arbitrar$ (4) Se adaug , la Anou, !u,,$ la Onou

>entru rezol,area problemei folosim matricea ponderilor !sau costurilor$ 0n 6orma ' ! $, i anume% o matrice ptratic ?i %imetric de ordin n, cu%

Jlgoritmii greedy sunt aplicai 0n rezol,area problemelor de optimizareP sunt compui dintrFo sec,en de pai, la fiecare pas exist/nd mai multe alegeri posibileP pot fi pri,ii ca o particularizare a tehnicii backtracking 0n care se renun la mecanismul de 0ntoarcere. 3lgoritmii greed> aleg la fiecare moment de timp %oluia ce pare a fi cea mai 'un la momentul re%pectiv: o alegere optim@ fcut local@ cu %perana c va conduce la un optim glo'al. "u toate ace%tea nu ntotdeauna conduc la %oluia optim . Wimpul de calcul este polinomial !de cele mai multe ori este necesar o sortare descresctoare a datelor de intrare 0n funcie de prioritatea sau ponderea acestora la soluia global F optim$. Wehnica greed1 este destul de puternic i se aplic cu succes unui spectru larg de probleme de optimizare 2Gor<=3.

"omputer #cience and Electrical Engineering Department Adrian FLOREA

ci,-, pentru 2i, -3# i i X cost!2i, -3$ , pentru 2i, -3# i i X =, pentru i -

Sec,ena de cod de mai -os exemplific modul de determinare a ,/rfului care ,a fi selectat datorit costului minim a muchiei care pleac dintrFun nod anterior selectat. 67777777777777777777777777777777777777777777777777777777777777777776 min / 89:_,A;; for(i/1;i1/n;i00) for(+/1;+1/n;+00) if(selectat[i]==1 && selectat[ ]==! && min"c[i][ ] ) min/c[i][+]; linie/i; coloana/+; 5 cout112 211linie112 211coloana112 <t<t -= <t211min11endl; electat[coloana]/1; 67777777777777777777777777777777777777777777777777777777777777777776 6iierele de intrare pot fi% > 1 ? ? 1 @ ? 1 > A ? A B ? @ 1 ? > > A @ @ @ > @

> 1 1 1 ? A @

? A @ > @ >

? 1 1 A 1 @

8.7. Realizai un program cu grafuri neorientate care implementeaz algoritmul lui Aru%Bal. >e prima linie a fiierului de intrare se afl numrul de noduri n i numrul de muchii m din graf. Se citesc apoi de pe c/te o linie separat perechile de noduri 0ntre care exista o muchie precum i costul aferent. Jlgoritmul lui HrusTal de complexitate logaritmic cu numrul de muchii !.!mYlog(m$$ este un algoritm din teoria grafurilor care gsete ar'orele parial de co%t minim al unui graf cone ponderat !gsete submulimea muchiilor care formeaz un arbore, incluz/nd toate ,/rfurile i care este minimizat din punct de ,edere al costului$. a$ S se reprezentinte graful prin matricea costurilor b$ S se determine submulimea muchiilor care formeaz un arbore care include toate ,/rfurile i al crui cost este minim. @a fel ca i 0n cazul algoritmului >rim i algoritmul lui HrusTal se bazeaz pe tehnica !reed>. Se pornete de la lista de muchii cu costul asociat lor i se ordoneaz aceast list 0n funcie de cost. Se alege 0nt/i muchia de cost minim, iar apoi se adaug repetat muchia de cost minim nealeas anterior i care nu formeaz cu precedentele un ciclu. 4iferena dintre "omputer #cience and Electrical Engineering Department Adrian FLOREA

cei doi algoritmi const 0n faptul c algoritmul lui HrusTal poate crea c/i,a arbori mici p/n c/nd arborele este complet, pe c/nd algoritmul lui >rim dez,olt un arbore parial pentru a de,eni arborele cutat. 4e asemenea, se recomand folosirea algoritmului >rim !care este mai rapid$ c/nd graful are foarte multe muchii !graf dens$, mult mai multe muchii dec/t noduri. Jlgoritmul HrusTal se comport mai bine !rapid$ 0n cazul grafurilor UaerisiteV !sparse$ deoarece folosete structuri de date mai simple. &ntrare: #n graf conex ponderat cu mulimea nodurilor A i a muchiilor O. &eire% Onou descrie arborele parial de cost minim !'$ Jrborele cutat ,a conine nF' muchii !i e,ident nu conine cicluri$ !($ Se creeaz o mulime de arbori, unde fiecare ,/rf din graf este un arbore separate !)$ #e creea$ o mulime Enou care conine toate muchiile din graf !7$ #ortea$ lista de muchii cresctor dup cost !8$ "t timp Onou este ne,id i nu sFau ales cele nF' muchii e ecut% !9$ Olimin o muchie de cost minim din Onou cu extremitile nemarcate sau marcate diferit !:$ Incrementeaz la costul arborelui costul respecti,ei muchii !;$ 4ac acea muchie unific doi arbori distinci, atunci adaug muchia, unificand cei doi arbori 0ntrFunul singur !<$ @a final, ,a rezulta arborele parial de cost minim al grafului. 5ai -os se prezint cele mai importante ,ariabile, structuri de date precum i sec,ena de cod care exemplific modul de generare a arborelui parial de cost minim. int viz[?0],m,n,c/0; 66vectorul viz pune carui ar$ore ii core pund muchiile, in final toate muchiile tre$uind a apartina unuia in%ur truct int ',C,co t; 5v[?0]; 67 e con idera un %raf v format din ma'imum ?0 de muchii pentru u urinta proce ului de de$u%-in%; fiecare muchie are doua e'tremitati (varfuri) i un co t 76 void #rus#al() int i,+,.; i/1; for(./1;.1/n-1;.00) 67al%oritmul e incheie in momentul in care am un ar$ore care lea%a toate nodurile; ace t ar$ore tre$uie a ai$a n-1 muchii76 3hile($i%[$[i]&x]==$i%[$[i]&'] && $i%[$[i]&x](=! ) i00; 67muchiile avand capete in ' (v[i]&') i C (v[i]&C) unt de+a inclu e intr-un ar$ore viz[v[i]&']4/0 trec la urmatoarea muchie in ordinea cre catoare a co turilor76 c0/v[i]&co t; 67cand a+un% pe prima muchie nea i%nata unui ar$ore ii adau% co tul la co tul %lo$al "omputer #cience and Electrical Engineering Department Adrian FLOREA

out11v[i]&'112

211v[i]&C11D<nD;

66afi ez muchia

electata

if($i%[$[i]&x])$i%[$[i]&']==!) 67Eaca e te adevarata conditia in eamna ca muchia nu e te a i%nata vreunui ar$ore (nici unul dintre cele doua varfuri ale muchiei)76 viz[v[i]&']/viz[v[i]&C]/v[i]&'; 67 i atunci e a i%neaza ar$orelui aferent unui capat al muchiei76 el e if( $i%[$[i]&x]*$i%[$[i]&']==!)67in ace t moment cu i%uranta unul din capetele muchiei a fo t vizitat iar celalalt nu76 viz[v[i]&']/viz[v[i]&C]/viz[v[i]&']0viz[v[i]&C]; 67 i ca urmare e a i%neaza ar$orelui de care apartine celalalt nod (cel care e te de+a intr-un ar$ore)76 el e 67in ace t moment cu i%uranta au fo t vizitate am$ele capete ale muchiei i daca apartin la ar$ori diferiti76 67atunci adau% muchia, unificand cei doi ar$ori intr-unul in%ur76 for(+/1;+1/n;+00) 67daca %a e c doua noduri diferite care apartin aceluia i ar$ore atunci adau% la ar$ore i nodul din celalalt capat al muchiei76 if(+$i%[ ]==$i%[$[i]&x], && + (=$[i]&x, ) 67 i impreuna cu el toate nodurile din ar$orele care cuprinde ace t nod76 viz[+]/viz[v[i]&C]; viz[v[i]&']/viz[v[i]&C]; 67adau% cel de-al doilea varf al muchiei a apartina aceluia i ar$ore76 5 i00; 5 out11c; in&clo e(); out&clo e(); 5

"omputer #cience and Electrical Engineering Department Adrian FLOREA

6iierul de intrare poate fi% F G 1 ? A ? A 1 A 1 ? 1 @ @ @ F ? F 1 > @ > 1 > 1 F

6iierul de ieire arat astfel% lista de muchii care compun arborele i costul ? @ @ A 1 10 A > F 1 @

:&:5&/!03;&E
2Ior=83 &orga 8.@ /pincaru ".@ #tratan ".@ "hiri 3. M ZStructuri de date i algoritmi. Aplicaii n C++ folosind STLV, Oditura >olirom, (==8. 2Wud=;3 Tudor #. M ZInformatica. Curs pentru clasele a IX a i a X a V, Oditura @[S IB6.F5JW, (==;. 2Dut=93 Cuanu 8.@ Tudor #. M Z!anual de Informatic intensi"# clasa a XI a# $arianta C++V, Oditura @[S Soft, Kucureti (==9 . 2@ic=93 5ica D.@ Pa?oi M. M Z%undamentele programrii & Culegere de pro'leme pentru clasa a XI aV, Oditura @[S Soft, Kucureti, (==9. 2I,a<;3 &va?c ".@ Prun M. M Z(a)ele informaticii *+rafuri ,i elemente de com'inatoric-# !anual pentru clasa a X aV, Oditura >etrion, '<<;. 2I,a<;3 &va?c ".@ Prun M.@ Matee%cu E. M Z(a)ele informaticii *+rafuri ,i elemente de com'inatoric-# caiet de la'oratorV, Oditura >etrion, '<<;. 2Gad<;3 "adar ".@ #troe M. M ZCulegere de pro'leme ,i programeV, Oditura >etrion, '<<;. 2Gor<;3 "ormen T.C.@ 5ei%er%on ".E.@ 0ive%t 0.0. M ZIntroducere n algoritmiV, Oditura Jgora, '<<;. 26lo'=3 ;lorea D. M Z!etode "i)uale de e Learning centrate pe algoritmi i te.nici de programareV, @ucrare tiinific pentru conferirea gradului didactic I, #ni,ersitatea U@ucian KlagaV Sibiu, (='=. D"orEFG "ormen@ T. C.@ 5ei%er%on@ ". E.@ 0ive%t@ 0. 5. M Introduction to Algorit.ms. 5cGra\F Dill, Be\ EorT, '<<=.

"omputer #cience and Electrical Engineering Department Adrian FLOREA