You are on page 1of 147
‘Emanuela Cercher (a, 12.04.1968, la Ing) ese absolventé a Faculifii de Matematis, setia Informasict (1950), 51a Seminarlui pedagogic postunverstar (1997), profesoart de informatcd (grad didactic, membra in Comisia National de Ioformatic. Autoarca a mai publica! la Edtura Folirom: dnternt. Manual peru lice (2000, avizat MEN), Informatica. Manual petra clasa a Nea (conor Marine-Paul Sean, 2000, avzat MEN), PC. Pas cu pas (conor Marne Pl Serban, 201), Informatica penis ginmacu (coantor Marinl-Paul Serban, 2002, avieat MEC), Informatica, Gegere de probleme pent ticeu (2002), Programarea x limbajul CC pentns lee (el 1, oautor Marine-Paul Serban, 2008), Programarea in limbajud C/C++ penta lieu. Metode si tehnici de programare (voll, eoautor Marne-Paul Serban, 2008). ‘Marine-Paul Serban (0. 29.06.1950, la Arad) exe absolvent al Facultit de Matematich-Mecanick, Universitatea din Timisoara (1973); specilizare postniversiars in informatict (1974), profesor de informatid (grad didaetic D), membru im Comisa National de Informatics. De acelsi autor, la Eaitura Polirom au spirut: Informatica. Manual pena claga a X-a(coautoare Emerucla Cerche2, 2000, avizat MEN), PC. Pas cx pas(coauoare Emanuela Cechez, 201), Informatica pentr pinnae (coautoare Emanuela Cerchez, 2002, avizat MEC), Programarea in limbajal CIC + pen lice (Vol. 1, coauroare Emanuela Cerchez, 2005), Programarea tn lnbaul C/C% + pent lieu ‘Meade si tehnci de programare (el. It, coautoare Emanuela Cetchez, 2005), Antoni ano bogattexperienglinprepitiea de performangé a elevlor: sustn crsur le Central de Pregitire a Tinerlor Capabili de Performan din las, propun probleme penta olimpiadcle 3 ‘cncursurle nationale si judejene de informatie, sustin atviatea Ge pega alotull najonal de Informatics, precum si programul de pregaie de performanta fn informatie’ campion. ‘© 2005 by Eéitura POLIROM wow. poliom.r0 Editura POLIROM lagi, Bul Catol It. 4, P.O. BOX 266, 700506 ‘Bucuresi, Boul [.C, Britany nr. 6, et. 7, ap. 33, 0.P. 37; P.O, BOX 1-728, 030174 Deserierea CIP a Bibliotecié Nationale a Rominiei: (CERCHEZ, EMANUELA, Programares in timbajal C/C++ pentra licen / Emanuela Cercher, Marine! Serban. I Plirom, 2006 30H ISBN (10) 973-46.0108-1 ‘Vol. 3. - 2006. - ISBN (10): 973-46.0438-4; ISBN (13); 978-973-46-04388 1. Serban, Maing! 004,42(075.35) 004.43 075.35) oat 45 €4.1(078;35) rite in ROMANIA Emanuela Cerchez, Marinel Serban PROGRAMAREA IN LIMBAJUL C/C.+ PENTRU LICEU ™ Teoria grafurilor ™ Structuri de date dinar 1 Pattern-matching Hashing Geometrie computationala re si arborescente) POLIROM. 2006 Cuprins 1. Teoria grafurilo... 1.1, Notun introductve 1.2. Reprezentarea grafurilor in memorie... 1.3, Grafuri ponderate. Reprezentare 1.4, inchiderea tanzitiva a uaui graf 1.5, Paougeengrefuror . 1.6. Coneritate.... 110. Aor paral dot nin 1.11, Biconexitate 1.12! Descompunere pe nive'uri a unui graf fia cicuite 1.13, Sortare topotogic& 1.14, Grafuri hamiltoniene, 1 1 LY 7. Rejele de transport. 1:18 Copa maxial a gral bipar. 1.19. Aplicatit rezolvat. 2 1.20. Aplicatilpropuse 2. Liste inlinuite 2.1. Liste simplu ininuite... 2.2. Liste simplu fnlinqite cieulare 2:3. Liste dublu inguite 3. Structui de date arboresceate 3.1. Terminologie. 3.2. Arbori binari 3.3. Reprezentarea arborilor cu ridicing. 3.4. Crearea unui arbore binar 3.5. Parcurgerea arborilor bina 3.6. Deerminara tahini unui store ie 37 Gleam arbor Bp pia pai nin 9 3.8, Heaps eens ar 3.9. Atbor iad care ae es 3:10. Repreaenarea mul digjnce 0000777 Soa 3.11. Arbori de compresie Huffinan 2212 3.12; Aber soi expresioratacce a6 3.13, Apap eaaiae “as 3.16, Aplahi pepe ie es 4. Pattern-matching ..... . i: sesenvee 233, 1. Teoria graft ilor 4.1 taroducere = : 28 42 algorinil lencaar (ais) Gee ielmrer | 4.3, Algom Kuh Morris Prat G2 4.4. Aplicatie. Desert... ‘Numeroase situajii din viata cotidian’ pot fi modelate cu ajutorul teoriei grafurilor. ea ates Numeroase probleme practice, cu aplicatii in fizicd, economie, chimie, sociologie 5. Hashing cto is see solu lid gor dn tora porto. eae nist dou mari categorie graful gear erenme 9 grafurl neorleniae iL arootn. ‘Vor ncerea se presen a parlel daiorid munereseot sn! care eit i ‘intre nofiunile fundamentale, reprezentirile in memorie $i algoritmii corespunzitori 3.3. Rezolvarea coliziunilor 3.4. Hashing perfect 5.5. Algoritmul Rabin Karp 5.6. Probleme propuse. 6. Geometric computationali.. celor dou categorii de grafus. 1.1. Nofiuni introductive 6.1, Introducere. Un graf (orientat sau neorientat) este 0 pereche ordonati de muljimi ¢=(v, ). 6.2. Puncte si drepte Multimea v este o multime nevidi si fini de elemente denumite varfurile eraful 6.3. Poligoane....... : Mulfimea & este o multime de perechi de varfuri din graf. in cazul grafurilor orien- 4 Geoneia depp. tate, perechile de varfuri din mulyimea ® sunt ordonate si sunt denumite arce; in 8.5, Aplicagl . ‘azul grafurilor neorientate, perechile de varfuri din multimea & sunt neordonate si 6.6, Probleme propuse... sunt denumite muchii. 7. Solugi si indica Perechea ordonati formatt din varfurile x si y se noteaz (x,y); varful > se hhumeste extremitate inifiald a arcului (x,y), iar virful y se numeste extremitate Bibliogratie 7 Se nee 293 Jfinalé a arcului (x,y) Perechea neordonati formaté din varfurile x si y se noteazi (x,y) ; varfurile x si y se numese extremitdjile muchiei (x, Daca existi un arc sau o muchie cu extremititle x si y, atunct varfurile x $i y sunt adiacente ; fiecare extremitate a unei muchii/unui are este considerata incidentd cu muchia/arcul respecti. ‘Vom considera ci extremititile unei muchii, respectiv ale unui are sunt distincte (adicd graful au confine buele), Observagit 1. Cu ajutorul unui graf neorientat putem modela o relatie simetrici intre elemeniele ‘unei mulfimi, in timp ce cu ajutorul unui graf orientat modem o relate care este simetrick FROGRAMAREA Is LIMGAIUL CC-H+ ENTRY LICEU frre oriate dou vf le uns grat poate exis cel mult o mucha. Dad nue oul vr exist mai multe muehi/are atc! stuctura se names rule 4m practic, informatie asociate unui vrt di grat po orielt de comple, ar, Beata a simplifica, noi vom considera ci varfurlegrafui sit estas ee ene ‘naturale de la 2 la n (unde cu n vorn nota numicul de vérfuri din graf), ‘Aceasti nume- folare nu ese o resringere a general (numa vault poste f costar ts xempls ocita pe care st memorate nun ver informatie tains vitae) Tn uate iccitide speci, un var l grt ete demented Fxemple Si considerim o clasd formaté din m elevi. Uni dinte elevii clasei sunt preten, telatia de priteniefiind evident simetricd (adic, dact Gigel este prieten ca Tonel, ‘atunci si Jonel este prieten cu Gigel). Putem modela relaile de prietenie din clack x ajutorul unui graf neorientat fn care multimea varfurilor are n elemente (elevii clase), iar mulkimea muchilor este formati din toate perechile de elevi, ct Droprietatea ca elevii care formeazi perechea sunt prieteni. ‘Si considera aceeasi clas’ de elevi ‘schimburile de cir ire elevi casei {imprumurat 9 cart de la elevul corespunzitor varfuluiy). Grafil este orintat decarece ‘elatia definitt nu este simetrcd (clevul x poate imprumuta citi de la elevul +, fir ca eleval y sf imprumute citi de la elevul x). Graful astfel defint modleacs doar relatia de imprumut existent intr eleviiclasei (a imprumutat sau nu eleva % edrti de Ia elevul y), dar nu si imprumuturile efective. Daca dorim si modeltm fiecare imprumut efectuat, vom construi un multigraf orientat in care vorn ave tte un are de Ia a.y pentru fecare carte fmprumutat de eleval x de la elevul y). Exercitii propuse ‘St analiza pe hart refeaua stradali a oragului in eare Jocuim. Observim cd unele ‘itizi au sens unic, in timp ce alte swzi au dowd sensuri de circulatie. De asemenea, (tice stradi are dou capete. Capetele de strizi pot fi intersecji sau fundanar Modelati harta cu ajutorul unui graf, explicdnd dacd graful este orientat sau neo. ‘lentat, care este mullimea varfurilor grafuli i, de asemenea, care este mulfimea ‘muchiilor/arcelor grafului ‘Si analizim barta lumi. Cum se pot modela relaile de vecinitate dintre piri cu ajutorul unui graf ? Reprezentarea vizuali: a grafurilor Pentru o mai bund ingelegere a notiunii de graf se uilizeaza o reprezentare vizuala descrisi astfel : fiecirui varf din graf fi corespunde un punct in plan, tn dreptul c&ruia este specificat numArul varfului asre ele. dacigraful este orientat, vom reprezenta fiecare arc ca o sigeati dinspre extre- acd graf eve neve, vor epresia feat she ca. Tie (reap sea curba) care uneste cele doud extremitisi ale muchiei. Uneo, penta» ni me Klin, un vrs spec unc th piace mid so he hea ell nia! is Ress se rat de Yasue un tal Sautiaincmnae foe dn cong rane Exemple fe v=, 2, 3, 4, 5} iar 1. $a considerdim urmatorul graf orientat o=(v, 8), unde V={2, (1,2), (Le), (2,4), (3,2), (2,3) }. Acest graf poate fi reprezentat ase \ © © © Figura 2. Graful neorientat o=(v, ), unde V={1, 2, 3, 4 5}, iar B={(2,21, (1/47, (2,4), (3,21}, poate fi eprezentat astfel 0 PROGRAMAREA IN LIMBAJUL CIC PENTRU LICEU iti propuse 1. Reprezentat vizual graful neorlentat cu mufimea virfurilor (1, 2,3, 4,5, 6) st ‘multimea muchillor {(1,21, (1,31, (2,4), (2,51, (1,61, (2.31, (2.4), (2,51, (2/61, (3.41, (3,51, (3,6), (4,5), (4.6), 65.61}, 2 Representa vizualgrafulorientat cu mulgimea virfuilor (2, 2, 2, 4, 5 6) si rullimea arcelor {(2,2), (2,3), (2,4), (1,5), (5,2), (6,1), (3,8)} Gradul unui varf Fie c=(V, #) un graf neorientat. Se numeste grad al unui virf din graf numrul dle much incidene cu vrfulrespectv. Gradul varfului x se noteaza a (2) De exemplu, pentru graful neorientat ilustrat in figura 2 402) =2, 42)=3, a(3)=1, a4) 92, a4). ‘Se numeste varf izolat un varf care are gradul 0. Se numeste var terminal un vart cu gradul 1 = De exemplu, in graful neorientat din figura 2, varful 5 este varf izolat, far 3 este varf terminal Fie ¢- > ©) un graf orientat si x un varf din graf. Gradul exterior al varfului x cu numarul de arce care au ca extremitateinijialé pe x i x 8e noteaz & (x) si este egal cu numirul de arce care aut 1 (4) 20, a (5 1492, 65 Teorema 1 1. Suma gradclor vérfurllor unui graf neorimtat este egal eu dublul numirulut de such din graf 2. Suma gradelor intrioare ale vérfurlor uni graf orienta este egald cu sume radclorexterioare ale virfurilorgrafului si egal cu numtvul de arce din wrat Demonsirate fow-un graf neorientat, fecare michie din graf contibuie eu © unitate la gradul fiecreia dine exemitle sale, deci in total la sua tuuror gradelor vaste, fiecare muchie consbuie cu dood unit. Int-an graf orient, Hecare are contibols uo unitate la sua gradelorinterioare ale varfurilor si cu o unitate la suine geaeiog exterioare ale virfurlor Fie n-124,24,2. ..242 Accasth secveuil se mumeste Seeventt graficd dach exists ut praf'neorlenla ca stadele virfurilor &,, 43, a. BORLA GRAFURILOR u . Seevenfa 4, 2, 2, 2, 2, 2, 1 este 0 secventi grafic De exempla, pena coc in figura urmatoare), (pentru c& este secventa gradelor varfurilor grafuh 4, 0.nu este seeventi graficl, deoarece mu exist hici agradele specificate in secvent Dar secventa 5, 4, 2, 2, ‘un graf ale clrui virfuri si al Teorema 2 Secvenfa de numere natwale nenule D=(4,24,2 ‘daca si numai dacd secventa D°=(8)-1,45-1, «4401-14, eraficd $i dySn-1. -.24,) este secventi graficd + vnidy) e8t€ seevents Demonstrajie Suficiena. Presupunind c& D' este seeventtgrafick, deducem ci exist un graf cu secventa gradelor 0°. Inroduvem in acest graf un nou varf pe care il vom uni prin muchii de vérfurile 2,3, ..,4:+1. Obsinem astfel un graf eu secventa gradelor D, Dect, Stems o> eu ce ae, pi ura xs el in vena radlotD. St consdetim el exe un asf de rag Eun: cl peu care sn ger vruror aac eu vf ese matin 4 demons en pail ©, vif 1 exe adacent chiar cu virile 2, 4,+1. (Ca urmare, putem si eliminim din c varful 1 si, evident, toate muchiile ineente eu acesta gis objinem un alt graf eu 3-1 vif gi seoventa grate lor D'.) esupunem cl exit un vt (24,1, atl Int rfl neste ada- cae ‘arf 1. Rezultd cA exist un varf 5 (j>4,+1), astfel incat varfurile 1 si sunt dicen. Dack grad =, putem ies varie 35, 8a alia dina din coven gradclor ack, cum ok, deduem 6. Dt atest Tuer consarice mod de agers a graf © (locaind vif 3h vrfl am tyne un pa near sama iaelor vrtroradlacate cu tema mare. Observatie : : : Demonstratia acestei propozitii conduce si la un algoritm constructiv de determinare a unui graf cu secvenja gradelor dati: la fiecare pas vom uni prin rmuchii varful curent i cu fiecare dintre cele 4, varfuri care urmeazi si vom decrementa gradele acestora; dupi fiecare pas, trebuie si reordonim virfurile dup arade. Algoritmul se termini fe cand am epuizat varfurile (dup n-1 pasi), fie cind No ———sssSSSCis eee 2 PROGRAMAREA IN UMBAIUL CIC-++ PENTRU LICEU sisim un varf § pe care mu i putem uni cu cele a, urmitoare (am objine un grad ‘egatiy), caz in care vom concluziona cd D nu este secventi grafic, Exercitii recolvate 1, Si se determine numarul maxim de muchii int-un graf neorientat cu a vérfuri Solutie ‘Nunta: maxim de michii $e obyine atunci cind oricare dow’ varfuri din graf sunt adiacente. Prin urmare, numiral maxim de muchii int-un graf cu n varfuri este egal ou numirul de submuljimi de dout elemente ale mulfimii 1, 2, ..., n}, adic& fet) /2, © 2. Si se determine numérul grafurilor neorientate cu n varfuri. Solusie St notim cu in(-1) /2 mumérul maxim de much tar-un graf eu a virfri gi Si considerim c& muchile posbile sunt mumerotate de la 1 la m. fnt-un graf cu 2 varfuri,fiecare dine cele m muchii poate si apartnd sau nu grafulu. Putem astfel asocia, in mod binivoc, fiecirul graf neorietat cum varfuri 0 fimtie £5 (2, 2, vom) > (0, 2) astfel: €(4)=1, dack muchia numerota cu ! apartine rafal, respectiv £(5)=0, tn caz contrar. de grafuri neorienae cu 2 ‘ varfori este egal cu numarul de funcji astel definite, adicam. Exercitii propuse 1. Si se reprecinte vizal un graf neorientat cu 5 virfuri in care fecare virf are rad maxim, 2. Sa se reprezinte vizual un graf neorientat cu 11 virfuri, cu numar minim de ‘muchii, in care s& nu existe varfuri izolae. 3. Si se determine numérul minim de muchii dintr-un graf neorientat cu n varfuti, ‘care mu contine virfuriizolate 4. Sa considerim graful orientat dit figura 3, Determinasi gradul interior si gradul exterior al fiecdrui varf, Figura 3 5. 10. IL -TEORIA GRAFURILOR 3 ‘Sa considera graful neorientat din figura 4. Determinafi gradul fiecdrui varf si idemtificayi vrfurile izolate gers Demonstrati cin orice graf neorientat, aumrl varfurior de grad impar exe pet Demonstrate un graf norenat care are mal malt de (1) (2-2) /2 chi 1 contne vir zlate Demons cl int-an ga neorlenst, eae ae el putin dou vrfri, exis cl putin dout vrfri cu acl grad. - ‘Sa se determine numérul maxim de arce intr-un graf orientat cu n varfuri)° Si se determine fumrlde graf orfentate cn vcr, Un graf neorentat ae 60 de nodur sf 80 de muchi, Numrul de nodur zlate este cel mult 2.90 ber eto 4.66 (Bacalaureat, iuie 2003) Se considera un graf neoriemtat cu 8 varfuri si 15 muchii. Numirul de varfuri izolate din graf este a, exact 1 cel mult 2 (Bacalaureat, jlie 2003) 1, 1, 2) este sau mu secventi ’. cel ul . exact 0 SH se verifice daci seevenga (7, 4, 2, 1 araficd. . Scrieti un program care si verifice dact o seeventi de numere naturale dati este sau nu secvenfA grafic, ia: in caz afirmativ si se afigeze muchiile unui graf ¢u secvena gradelor egali cu secventa specifica, 4 PROGRAMAREAIN LIMBATUL Cl¢+4 PENTRU LICE Lan}, ciclu, drum, circuit Se numeste Jany, intr-un graf orientat sau neorientat, 0 seeventi de varfuri Xi» 2a» wns 51 CU proprictatea ci oricare dout varfuri consecutive din secventi sunt adiacente, De exemplu, pentru graful neorientat din figura 4, seevenja {2, 4, 2, 5) este un lant, Pentru graful orientat din figura 3, secventa (1, 4, 2, 3, 4, 5) este un lant Un lant este numit elementar dact el nu confine de mai multe ori acelasi varf. Un lant este simpli dack el nu confine de mai multe ori aceeasi muchic. Lanmul (1, 4, 2, 5) al grafului din figura 4 este elementar si simplu, Lantul {2, 4 2, 2, 4, 5) al grafului din figura 3 este simplu, dar nu este elementar (trece de dows ori prin varful 4). Lanqul (2, 4, 2, 3, 4, 2, 5) pentru graful neorientat din figura 4 nu este simplu, deoarece trece de doul oti prin muchia (2,4) ‘Se numeste ciclu, intr-um graf orientat sau neorientat, un lang simplu pentru care ‘extremitatea initial coincide cu extremitatea final. Se numeste ciclu elementar un cictu care nu confine de mai multe ori acelasi vast (exceptand extreminaile sale), De exemplu, (1, 2, 3, 4, 11 este un ciclu clementar in graful neorientat din figura 4 ‘Drumul se numeste drum elementar dacé nu confine de mai multe ori acelasi viet. Drumul se numeste simpiu dact nu contine de mai multe oti acelasi are De exemplu, pentru graful orientat din figura 3, seeventa (6, 5, 4, 3) este un drum elementar, tn timp ce secventa (5, 4, 2, 2, 4) este un drum in graf care nue lementar, deoareve congine de dou ori varful ¢. Se numeste circuit intr-un graf orientat un drum simplu, pentru care extremitatea initial coincide cu cea final. Circuital se numeste elementar daci nu confine de mai ‘multe ori acelasi varf (exceptind extremititile), De exemplu, pentru graful orientat din figura 3, seevenja (2, 2, 4, 2) este un cireuit elementar. -TEORIA GRAFRILOR 15 ‘Un lany/drum/ciclu/cireuit elementar se numeste hamiltonian’ daci el trece prin ‘wate varfurile grafulul ‘De exemplu, graful din figura 5 confine circuital hamiltonian: (1, 2, 4, 3, 8, 6, 5, 1). Figura s Un lany/drum/cictu/cireuit se numeste eulerian dacd trece prin fiecare muchie/are al grafului exact o dati. De exemplu, graful din figura urmétoare contine un ciclu eulerian: (2, 2, 3, 7, 6,8, 7, 4 5, 2, 4, 1), dar nu confine nici un ciclu hamiltonian. Figura 6 ‘Se numeste lungime a unui lany/ciclu/drum/circuit numirul de muchii/arce cconfinute, De exemplu, in graful orienat din figura 5, lungimea drumului (6, 7, 5, 1) este 3, deoarece confine arcele (6,5), (5.4) $i (4,3). In graful neorientat din figura 6, Tungimea ciclului (1, 2, 3, 7, 4, 1) este 5, deoarece contine muchiile (2,2), (2,31, (3,71, (7,41, (4,31 ir Wa Hato 185-186, 1. Denumies provi dee mse emclarlanex Sr Wa 1 cae eonep jl dem rod he Word sepa jc en decries al Ct anit 16, FROGRAMAREA IN LIMBAIULCIC-H+ PENTRU LICE AS ____HROGnANAREA WNEBAULlee rem icey + Construifi un graf cu's varfuri si numiir minim de arce, care confine un circuit Exercipii propuse hamiltonian, Cate astfel de grafuri exist? ‘Sa consider graful neorientat din figura urmitoare. Identificati in acest graf: un lant elementar de lungime cel pusin egali cu 3; ‘un lant simplu, care nu este elementar; un lang care nu este elementar ; un cicla elementar ; un ciclu care nu este elementar ; tun lan elementar de lungime maxim’ ; un ciclu hamiltonian, OO-0 7/| \ \ foo w ee Sareea rere inspec gird se seo hie So eum lun circuit elementar de lungime maxima ; un drum hamiltonian, dact acesta exist. iby graf |. Determinati toate ciclurile hamiltoniene ale grafului din figura urmitoare : {TEORIA GRAFLTILOR b 5. Dati un exemplu de graf neorientat cu 10 varfuri si numir maxim de muchii, care si congind numai lanturi elementare de Iungime cel mult egal cu 2. Dari un exemplu de graf neorientat care si contind cicturi hamiltoniene, dar si nu contini cicluri euleriene. 7. Dati un exemplu de graf orientat care si congini un drum eulerian, dar si nt conn nici un drum hamiltonian, 8. Si se demonstreze ci un graf neorientat care confine lanjuri euleriene are exact dou varfuri de grad impar, 9. Se considera un graf orienta cu 6 virfuri etichetate cu numere de la 2 la 6, 16 arce, astfel incdt exist un arc de la fiecare varf cu eticheta i citre un varf cu cticheta i+2, dact exist un astfel de nod, sau citre nodul cu eticheta 1, ia ccaz contrar. Care este lungimea maxima a unui drum in graf? ae ba e3 2 (Gimutare Bacalaureat, 2003) 10, Dati cate un exemplu de graf orientat cu 10 varfuri si de un graf orientat cu 11 varfuri, in care, pentru orice dou varfuri x si y din graf, existd drum de Tungime cel mult egala cu 2 de lax Ia y. 11. Scriesi un program care si citeasca de la tastaturd un num natural nenul n sist afigeze in fisierul graf .out toate arcele unui graf orientat cu n vrfuri numerotate dela 1 lan, graf cu proprieatea ci intr oricare dowa virfuri x si yale sale exist ddrum de lungime cel mult egala cu 2 de la x la y. Fiecare are va fi scris pe 9 linie separatd, specificénd irtdi extremitatea inisial i apoi extremitatea final, Grafuuri asociate unui graf dat (\ Fie c=(v, 2) un graf oriemta: sau neorientat. Graful ¢* =(¥, Partial al grafului c dact Bx, ) se numeste graf Observatie ‘Un graf paral al unui graf ce obyine climinand muchii/ace din graful c. Exemplu Graful ¢: Un graf partial al grafuluio, obtinut prin eliminarea dou muchii ((2, 51 si [2,31) 18 PROGRAMAREA IN LIMBAIUL-CIC++ PENTRU CEO Fie c=(v, #) un graf orientat sau neorientat. Graful ¢' =(v', =") se numeste subgraf al grafului ¢ daca V' cy, iar &° este muljimea tuturor muchiilor/arcelor din & cu proprietatea cf au ambele extremitii in V' Observatie Un subgraf al unui graf o se obtine elimindnd virfuri din c impreun& cu toate ‘muchiile/arcele incidente cu acestea Se spune c&. subgraful c* este indus (sau generat) de multimea de vaefuri v". Exemplu Graful ¢: Un subgraf al grafului , obsiout prin eliminarea virfurilor 1 si 4 si a muchiilor incidente cu acestea: RR O > alee © Fie c=(v, 8) un graf orientat sau neorientat. Graful ¢ B*) se mumeste subgraf parpial al grafului ¢, dact v'cv, iar multimea &* este inclusi ta muljimea ‘tuturor muchillor/arcelor din = cu proprietatea ci au ambele extremitii in V" Observatie Un subgraf paral al unui graf c se obtine efiminind varfuri din c, toate ‘uchile/arcele incidente cu varfurile eliminate, precum si alte muchii/arce din graf. Exemplu Grafil Un subgraf partial al grafului 0, obginut prin climinarea varfurlor 1 si 4, a muchillor incidente cu acestea sia muchiei (2,5) Fie o=(v, 8) un graf orientat. Graful c"=(v, &") se numeste graful cranspus al grafului G dact ="={¢y,2)|(x,y) ez} j ‘TeonA Gearueion 9 Observatie Graful transpus are acceasi muljime de varfuri, iar muljimea arcelor este format dln arcele grafului initial, cu sensul inversat Exemplu Graful { Graful transpus ¢°: 7 Exercitii rezolvate 1. Fie c un graf cu n varfuri sim muchii/arce. Determinagi mumirul de grafuri partiale ale tui. Solute SA numerotim muchiile grafului de la 1 la m. Fiecirui graf partial ti putem asocia {in mod biunivoc o funetie £:(1, 2, ..-, m)—>(0, 1) astfel: £(3)=2 dact mudhia ‘mumerotati < apartine grafulu: partial, respectiv £()=0, in caz contrar. Numrul de ‘grafuri partiale este egal cu mumérul de functii astfel definite, adick 2" (considetim chun graf este graf partial al stu) 2. Fie o un graf cu n varfuri si m muchii/arce, Determinaji numrul de subgrafuri ale tui c Solute Pentru a genera un subgraf, trebuie st selectim multimea varfurilor sale, muljimea muchiilor/arcelor fiind unic determinati de multimea vasfurilor selectate Moltimea {2, 2, ... n} are 2° submuljimi, dintre care elimintim multimea vid’. Prin urmare, existi 2*-1 subgrafuri ale unui graf cu n varfuri (considerim c& un graf este subgraf al siu) PROGRAMAREA INLIMBAILL CCH PENTRU CEU Exercitii propuse 1. Se considera graful neorientat din figura urmitoare. SX se determine un subgraf cu ‘numér maxim de varfori, cu proprietatea ci oricare dowd varfuri din subgraf sunt © _ 2. Se consider graful orientat din figura urmitoare. Si se determine un graf partial al stu cu mumér maxim de arce si cu proprietatea cd existé un varf care are gradul interior © si gradul exterior 3 3. Se considera grafurile din figurile urmitoare. Este graful ¢* un graf pa srafului G? Dac nu, eliminati un numér minim de muchii din o*, astel i ‘i devind graf partial al lui c Graf: Graful 6: Q) 4, Si se determine graful transpus al grafului orientat dela exercitiul 2. ‘5. Determinati un graf partial al grafului neorientat de la exercitiul 1, care sé aibi ‘numa maxim de muchil si care si nu consid ciluri, 6. Deverminay! un subgraf al gratulut orientat de la exercitiul 2, care si aibi! numar ‘maxim de varfuri si toate varfurile si fie izolate ‘Teonia GRAFURILOR a1 Tipuri speciale de grafuri Graf complet ‘Un graf orientat sau neorientat se numeste complet dact oricare dou virfuri din graf sunt adiacente, e Observatie Graful neorientat complet ou varfuri se noteaza x, si contine n(n=1) /2 much. Exemple Grafurile neorientate complete cu n=3, ¢, 5 varfuri % Ke QD BX Pentru un numa de varfuri fixat, graful neorientat complet este unic, dar grafuri orientate complete existi msi multe. De exemplu, iati doui graftri orientate complete cu 4 varfuri: — — Qx@ CED WY : 2S BD | Graf antisimetric Un graf orientat se numeste antisimetric dact pentru orice x si y, varfuri din grat, acd exist arcul (x,y), atune) nu exist arcul (50) Observatie rice relatie de ordine intr clementele unei multimi poate fi modelat cu ajurorul ‘unui graf orientat antisimetric (varfurile grafului corespund elementelor malimii >no>mi| {Elnssxosy7 AO [y]=Aby1 [x1 Hin.close(); ) {Toon GRAFURILOR a | Care dintre urmatoarele afirmatii sunt adevirate? | a Graful este neorientat. | b. Graful congine un ciclu culerian. | © Graful este biparti. . Toate varfurile grafului au grad par. . Graful este graf tumeu 3. Se considers graful neorientat dat prin matricea de adiacenji urmitoare. Si se determine langimea minima a una lang ce unestevarfurle © si 3 Gitirea unui graf orientat si reprezentarea sa prin matrice de adiacengé in fisierul de intrare gxaro Solugie ‘Vom citi din fisierul de intrare fiecare arc (x,y) si vom plasa valoarea 1 in ‘atricea de adiacents doar pe pozitia (x,y). void Citire_graf_ori Cnt a, x, Lfstream fin(*grago.in"); Hin >> n >> mi: while (=) (Ein >> 3 55 ys AL (ylst: } fin.close(); > entat() Exercifii propuse 1. Construiti reprezentirile prin matrice de adiacenté ale grafurilor urmétoare qt, Oe © 2. Matricea urmitoare este matricea de adiacenfi a unui graf. 2 z ° 0 0 ‘ o 7 o o o n se citese de pe prima linie dou nomere naturale 1 si m, reptezentind numirul de virfuri, respectiv numarul de arce dintr-un graf orientat. Se citesc apoi cele m lini, pe fiecare linie flind specificate dowd numere naturale cuprinse intre 1 si n, reprezentind extremitateainijal ‘unui arc din graf. Sa se construiascd matricea de adiacen{a a grafului. Os 6. Care est gradul int as extremitatea final 1 3 L ° z ae a as : (Bacalaureat, ie 2003) 4, Care dintre urmitoarele este matricea de adiacenté a unui graf orientat cu 4 ace? Ga 01 Og eee ete ails eseee0l aaa face| on zoro oo12 0000 0000 1010 iioa 1000 1001 do10 rioa 0000 ao00 oo00 (Bacalaureat special, 2006) ‘5. Stabilti care dintre urmatoarele matrice de adjacent’ corespunde grafului din figura ‘urmitoare : a 0002 b 01010 ¢ oooira 4 0110 oo1r 10030 oo007 1010 o1ol 20000 ooo'on Lioi aaao L1000 10001 Doro ooora 11010 Q Cacao, gut 208) at vst en grat exer otal mare an gat @ crlentat cu matrices de adicené urmitoare: © © cole C ~©) iio: rise oe 5s (Bacalaureat, august 2003) a 7. Care este matricea de adiaceati a unui graf neorientat cu 4 varfuri, doud muchii si 2 cel pusin un varf izolat? z a 001 b 0110 ¢ 0101 @ oo00 a oon 10co 1000 oor | 110 1010 dooa O10 a ooco 1000 o110 o | (Simulare Bacalaureat, 2004) PROGRAMAREA IN LIMBAJUL ClC-++ PENTRU LICE Orice graf neorientat cu n nodusi are o matrice de adiacenyé cu urmatoarea pro- prietate a, Este simetrcd fata de diagonala principala. D. Este simetrict fapi de diagonala secundara. . Este format numai din valorile 0, 3 si 1 4. Are suma elementelor egaliicun. > 9. Din fisieral de intrare grain.in se citese de pe prima linie dows numere naturale n sim, reprezentind numirul de varfuri, respectiv numatul de muchii Gintr-un graf neorientat. Se citesc apoi cele m lini, pe fiecare linie find specificate dow numere naturale cuprinse ince 2 sin, reprezentind extremititile lunei muchii din graf. De pe ultima linie a fisierului de intrare se eiteste un ‘numir natural p, urmat de p numere naturale cuprinse intre 1 sin, reprezentand © seeventi de p varfuri din graf, 4. Si se vonstruiascd matricea de adiacengi a grafului din fisierul de intrare si si se afigeze tn fisierul de iesire gratn.out. . Sa se determine gradul fiecdrui varf din graf si s& se afigeze pe o linie separatd in fisierul de iesire grata cut. . Sd se yorifice dacd secventa de varfuricittt de pe ultima linie a fisierului de intrare este un lant in graf; in caz afirmativ, si se idetifce propriettile langului (clementar, simplu) si si se afigeze un mesaj corespunzitor rezultarului veri- ficdrii in fisierul de iesire, 4. SX se Nerifice dacd graful din fisierul de intrare este graf complet si si se afigeze un mesaj corespunzitor rezultatului verificéri, pe ultima linic 2 fisierului de iesire gratn out. 10. Serie un program care si citeascd doux grafuri neorientate date in formatul de la problema precedenta si care si verifice dack primul graf este un graf partial al celui de al doilea graf 11. Din fisirul de intrare grato.in se citesc de pe prima linie douk numere naturale 2 si m, reprezentind numérul de varfuri, respectiv numirul de arce intr-un graf orientat. Se citesc apoi cele m lini, pe fiecare lini find specificate dou numere naturale cuprinse intre 1 sin, reprezentind extremitata iniiala si extremitate final a unui are din graf. De pe ultima linie a fisierului de intraze se citeste un numir natural p, urmat de p numere naturale cuprinse intre 2 sin, reprezentind o secventi de p virfuri din graf. Si se construiasca matricea de adiacengi a grafului din fsierul de intrare si st se afiseze in fisierul de iesire grafo.out. . SX se determine gradul interior si gradul exterior al fiecdrui varf din graf si Si se afigeze in fisierul de iesire grafo.out (pe linia n+1 gradele interioare Separate prin cate un spafiu, iar pe linia n+2 gradele exterioare), ©. Si se verifice daca secventa de varfuri citi de pe ultima linie a figierului de intrare este un drum sau un lant in graf; in caz afirmativ, st se identifice Proprictitile drumutui/lantului (elementar, simplu) si si se afigeze un mesa} orespuunzltor tezulranuul verificari in fisierul de igite ORLA GRAFURILOR 29 4. Sa se verifice daci graful din fisierul de intrare este graf complet si s4 se afigeze un mesaj corespunzator rezultatului verificiri pe urmitoarea linie a fisierului de iesire grazo.out, . SX se verifice daci graful din fisierul de intrare este graf antisimetrc si si se afigeze un mesaj corespunzitor rezultatului verifictii pe urmatoarea linie a fisierului de iesire gr2£0. out. 12. Un varf al unui graf orientat se numeste supersursi dact el are gradul intetior egal cu o si gradul exteror egal cu n-1 (unde n reprezinta numérul de varfuri din graf). Find dat un graf orientat in formatul de la problema precedenta, scrifi un algoritm eficient care si identifice supersursele grafului Reprezentarea prin liste de adiacenga Fie G=(v, 8) un graf neorientat sau orientat cu n virfuri Pentru a reprezenta graful prin liste de adiacengi, vom utiliza un vector cv a componente, in care vom retine pentru fiecare varf din graf lista sa de adiacenti. Lista de adiacentd a virfului > va contine toate varfurile y cu proprietatea| ci ‘exist muchia (x,y) (Pentru graf neorientat), respectiv exist arcul (x,y) (pentru ‘graf orientat). Ordinea in care sunt memorate virfurile intr-o list de adiacenjé nu conteaza. Exemplu Graful Reprezentarea prin liste de adizcengl a grafului cy: ® 2]3]4 2a ee) aaa «PE oat, I EARS wea rato 2 © of CP 3 [es «G © Detatit de implementare Varianta 1 © list de adiacenti poate fi reprezentail ca un vector in care varfurile sunt ‘memorate pe pozitii consecutive. » PROGRAMAREA INLIMBAIUL C/C++ PENTRU LICEU Observe ci mumirul de elemente din isa de adiacens iter de ta un vac Ia alu, find egal eu gradu, respec gradul exterior al vArfului, grad cuprins inte © fin Tn primul rind, va fi necesar si memorim gradul, respec grata exterior al fcr varf. Aces ura se pote realzafntr-un alt vector (vector gradlor) sai ‘tem memora pe pozta © a vectoruli in care memorim Ika de adacen. Vector in gare memorim lade adiacenp sun arf pote float state saa namie in cazul in care vectorul este alocat static, dimensiunea spatiului de memorie necesar pentru reprezentarea unui graf prin liste de adiacengi va fi O(n"), aceeasi ca Sin cal matsioe de aiaceng, In cazal in earealocim dinanie memorie pentru vectorul in care este memorats lisa de adaceni, dimensiunea spafsui de memorie necesar pentru repreentarea ‘unui grat prin lise deadlacena va O(n), unde m este numiru de machivarce fn cazal in eare dimensiuneaspailui de memoriealocat static est 0 problemd, va fi preferatialocarea dnamie a memoriei petra listele de adiacen Varianta tt Lista de adiacenfi a unui varf poate fi implementat eu ajutorul unei structuri de date dinamice, denumiti list inkinquict (aceastéstructurd o vom studia ulterior), Daca structura grafului nu se modificd (deci mu au loc operat de inserareeliminare ‘4 unor muchii/arce din graf), utilizarea unei astfel de implementiri nu se justfic, deoarece = operatile de prelucrate a listelor fninuite sunt mai dificile decét operaile de prelucrare a vectorilor ; ~ se dubleazi dimensiunea spatiului de memorie necesar, deoarece pentru fiecare nod din lista inlintuité trebuie sé retinem si adresa urmétorului element din list Citirea unui graf neorientat si reprezentarea sa prin liste de adiacenst Din fisierul de intrare evafn. in se citese de pe prima linie numerele naturale (2100) sim, reprezentind numfrul de varfuri, respectiv numrul de muchii dintr-un ‘graf neorientat, Se citesc apoi cele m linii, pe fiecare linie flind specificate dou ‘numere naturale cuprinse intre 2 si x, reprezentind extremitigile unei muchii din raf. Sé se construiasca reprezentarea prin liste de adiacengé a grafuli Solugie Considerim ci numiral de vérfuri din graf n si reprezentarea prin liste de ‘adiacenti a grafului A sunt variable globale. De asemenea, vom considera c& gradul fiecdrui virf din graf va fi memorat pe pozita 0 a vectorului care repreziné lista sa de adiacents. Implementare statias faofine mec 101 Amt ny A(iifax] (Nal ; | | | | | | | | | | | | | TeORIA GRAFLRILOR an ‘Vom citi din fisierul de intrare fiecare muchie (:,) si vom plasa pe y in lista de adiacenti a tui x, apoi vom plasa pe x in lista de adiacengi a lui y. void Citire_graf_neorientat() Hint my 3, 2 ‘gstream fin(*grafn. int); Einson>on) while (n--) {fin >> x25 yy Ax] [0)+4; Abe) (40 101) Aly][0]+#; Aly] CA(y) [0] ) d Implementare dinamicés Reprezentarea grafului prin liste de adiacentS alocate dinamie va fi un vector ¢u ‘componente de tip pointer. define max 101 int * Apuax); ALL] = adresa de inceput a vectorului ce va memora lista de adiacengi a vArfului 4. Initial, pentru fiecare virf vom aloca dinamic memorie pentru singuri com- pponenti in vector (componenta 2 in care rejinem gradul varfului). De fiecare dati cand vom citi o muchie (x,y: = vom mri gradul varfului x, vom realoca memoria necesara pentru lista de adiacengi a Tui x si vom memora varful y in lista de adiacengi a lui x; = vom miri gradul varfului y, vom realoca memoria necesari pentru lista de adiacenté a lui y si vom memora varful x in lista de adiacengi a lui y Pentru a aloca/realoca dinamic memorie pentru un vector vom utiliza functile calloc|) gi reatloc(). Aceste functi sunt declarate in etalib.h: [voi * cattoc(sizet nz, size_t fect Se aloci in mod dinamic un vector cu nr componente, fiecare component avénd dimensiunea aim octeti. In cazul alocirii cu succes a memoriei, functia returneazit adresa de inceput a zonei de memorie alocate. in cazul unui esec (memorie insuficienta, nr sau aim nule), functia returneazA valoarea 0 (87:1). Observati c& tipul parametrilor functiei este size_t, Acesta este un tip specific Hinclude ddetine moisx 101 int 2) Amt * A(nMax); void citire(); void Afieare(); Ant main() (citizen): Afisare() { retura 0; ? vota citize() (erg * fim ropen(“grafn.in*, *r*); 8d 8A", bn, Bed pentru gradul fiecarui vart ie) [ila (imt *)realloc(Alil, sizeof(int)); ‘ALI {01=0;) for (1:0: |iemy its) (Escang (fin, "84 ta", ex, ey): ‘AGe] (01+; /* incrementam gradul varfului x */ /*redlocam memorie pentru lista de adiacenca a lui x*/ Ald (ime *)zealloc(Atx], (AGe) (0) +1) *eizeo! (int) ) /tmenovan pe y in lista de adiacenta a lui x */ AGE [AGE [01 ALy][Ol++: /* increnentam gradul varfului y */ /*redlocam memorie pentra lista de adiacenta a lui y*/ Afy]=(imt *)realloc(aly], (Ay][0]+2) *sizeor (ime) ) /*mesoram pe x in lista de adiacenta a lui y */ ) AEG) } void Aticare() (int 2, 3; for (isl; icon; is+) sta de adiacenta a varfului td: +, i}; 7 Jeeali){0]; J++) printé (ea *, ALAT(I)): Exercitii propuse 1. Construiti reprezentirile prin liste de adiacenga ale grafurilor urmitoare : o®, oP. 5 “SHO | PHO 2. S& considerim urmétoarea reprezentare prin liste de adiacengi a unui graf: 3/6 a 3 4 2 Care dintre urmitoarele afirmatii sunt adevarate? ‘Reprezeatarea este ineorect. Graful este orienta. Graful este bipari. Graful confine circuite. Graful este antisimeri Graful contine varfuriizclate. 3. Se consider’ graful din figura urmitoare. Si se determine care dintre liste reprezinti lista de adiacengi a varfului 3 3 ep ales baies eas does at PROGRAMAREAIN LIMBNUL CIC PENTRU LICEU 4. Se consider graful neorientat din figura urmitoare. S& se determine numarul ‘Varfului care are lista de adiacenti2 3 5. OS. ote (@acalaureat, tie 2003) jerul de intrare grat. in se citese de pe prima linie dow numere naturale 1 sim, reprezentind numérul de varfuri, respectiv mumrul de arce dintr-un graf orientat, Se citese apoi cele = lini, pe flecare line flind specificate dou numere naturale cuprinse inte 1 sin, reprezentind extremitifile unui are, . Si se reprezinte graful prin liste de adiacent’ alocate dinamic. b. Siise determine varfurile care au gradul imerior egal cu gradul exterior. ©. Siise verifice dack graful este graf turneu, 4. Sai se construiasc& graful transpus al grafului dat si sf se afigeze pe ecran lista de adjacent a fiectrui varf din graful ranspus, as b3 4 da Reprezentarea prin lista muchitlor/arcelor Pentru a reprezenta un graf neorientat prin lista muchiilor, respectv yn graf orientat prin lista arcelor, se utiizeaz un vector cu m componente, unde m este ‘numdrul de muchii/arce din graf. Pentru fiecare muchie/arc vor fi refinute cele doug extremititi. fn cazul muchiilor, ordinea extremititilor nu conteazA. in cazul arcelor, ‘va fi reinut mai inti extremitatea initial, apoi extremitatea final. Exemplu Graful ¢,: Reprezentarea prin lista muchillor a grafului c, ase OLS : SESENE! ) Reprezentarea prin lista arcelor a grafului o; oe eee eee 2t2]214 Qo |EEFE | | | } | | | | | | | | | TEORIA GRAFLRILOR, as Detalii de implementare ‘© muchie/un are poate fi reprezentat() ca o structuri cu dou’ cdmpuri (cate unl pentru fiecare extremitate), reprezentarea grafului prin lista muchilor/arcelor fiind astfel un vector de structuri, sau ca un tablou cu dow componente, reprezentarea ‘grafului prin lista muchiilor/arcelor fiind astel o matrice cu dowd lini si m coloane. Observasii fotrebarea care se impune tn acest moment ¢ ,care este cea mal bund reprezentafe 1 unui graf?”. Rispunsul este... depinde! Depinde de problema pe care dorim s8 0 rezolvimn. De exemplu, pentru reprezentarea prin matrice de adiacent, timpul de execute pentru prelucrarea matrcei este O(a"), dar rispunsul la o interogare de forma ,varfurile x si y sunt adicente” se obfine in O(2) In cazul reprezentaririi prin liste de adiacenji, impul de execurie penta prelucrarea matricei este O(asn), dar ispunsul lao interogare de forma , varfurile x sly sunt adiacente” se obgine n O(a). Reprezentarea grafului prin lista muchillorarcelor poate fi deosebit de utili pen- tru problemele in care este necesari parcurgerea muchillor/rcelor fna-o anumith ordine. Dar rispunsul lao introgare de forma ,vdcfurle x iy sunt adiacente” se obgine in Of). Exercigii propuse 1. Construti reprezentirile prin lista muchiilor/ercelor ale grafurilor urmitoare : Oat 2. Se considera urmatoarea reprezentare prin lista muchiilor a unui graf neorientat cu 7 varfuri, S& se determine gradele virfurilor grafuli 123 @ 5 6 7 2]2]°|2|2]715 tlefsie(7[[e 3. Se consider urmlioarea reprezentare prin lista arcelor a unui graf orientat cu/7 vvrfuri, Care dintre urmatoarele afirmai sunt adevarate? 23 @ 5 6 7 8 9 213]>|4|7)7 [5/5 elels[7|s/.[:[é Graful confine circu. b. Varful 5 are gradul interior egal cu gradul exte cc. Graful este antisimetric, 36 PROGRAMAREA IN LIMBAUL.CIC+ PENTRU CEU 4, Exist cel putin un drum de la virful 2 la fiecare dintre celelalte virfuri ale srafului (fiecare varf din graf este accesibil din varful 2). . Graful este complet. 4. Din fisierul de intrare graf. in se citese de pe prima linie dow numere naturale 1 sim, reprezentind numérul de varfuri, respectiv mumirul de arce dintr-un graf orientat. Se citese apoi cele m lini, pe flecare lini find specificate doua aumere naturale cuprinse inte 1 sin, reprezentind extremititile unui arc. a. Reprezentati graful ctit prin lista arcelor. b. Determinati gradul interior si gradul exterior al fiectrui var. ©. Verificati daca graful este antisimetric. 4. Construitireprezentarea prin lista arcelor a grafului transpus. 1.3. Grafuri ponderate. Reprezentare in numeroase situatii practice modelate cu ajutorul grafurilor, fiecare muchie/arc a/al grafului are asociat un anumit cost sau 0 anumiti pondere (de exemplu, lungimea cablului_necesar pentru conectarea a dou calculatoare intr-o retea, costal de transport pe o anumiti rue, profitul obsinut dintr-o anumiti tranzaetie ete). Graful o=(y, 2) (orientat sau neorientat)insogit de o functie ©:2—R, prin care se asociazi fiecirei muchii/are din graf un numér real se numeste graf ponderat, Pentru a reprezenta un graf ponderat ebuie si refinem si costurile aso rmuchiilor/arcelor. Astfel, matricea de adiacent devine matricea costurilor, © matrice pitraticd c avind n linii si x coloane (unde n este numérul de vasfuri'din graf), Aefinité astfel: {>} (y1 va fi costul muchiei/arcului de la x la y dact exist, sau 6 daci xy, sau 0 valoare speciali, care depinde de problemi, indicind faprul e& nu ‘exist muchie/are de la lay. In listele de adiacengt nu vom rejine doar varfurile adiacente, ci si costurile arcelor/muchiilor corespunzitoare. {in ist muchilor/arcelor vom adauga pentru fiecare muchie un cmp suplimentar (cost), Exercifiu propus ‘SA consider grafurile ponderate din figura urmatoare, Si se reprezinte fiecare raf in cele 3 moduri prezentate © 20 © 20 eon cearURILon fa 1.4. inchiderea tranzitiva a unui graf ‘Matricea inchiderii tranzitive a unui graf c este © matrice pitraticd a° avind linii si n coloane (unde n reprezinti numarul de varfuri din graf), cu elemente din samlkimea {0, 1}, definiti astel: aCi}(3)=1 daca si numai dact existi un <érum/lang de lungime 0 de la ila 5 Matricea inchiderii tanzitive este cunoscuté si sub denumirea de matrices 0. 3. Matricea inchiderii reflexive si tranziive a unui graf, x°, se defineste in mod similar, cu diferenya c& a'(i1(J1=1 dad si mumai dack exist un drum/lang de Tungime 20 de la i la j. Cu alte cuvinte, in matricea inchiderii reflexive si tranzitve, diagonala principala trebuie si fle iniializat cu 2 Exercifii propuse 1, Sé se determine matricea inchiderii tranzitive a grafului din figura urmitoare 28 PROGRAMAREA INIMBAIUL CIC PENTRU LICEU TEORIA GRAFURILOR 2 2. S& considerim urmitoarea matrice a inchiderit tranzitive a unui graf orientat. Si . se identifice varfurile care nu aparfin nici unui circuit. Exempl ‘Sa parcurgem in adincime graful din figura urmitoare, considerdnd drept virf de aaaiar ‘ P daiaai ‘sar varful 3 | oooooa aiaiai haiaaa ooo000 eo; re ® @ | 4, Seri in program cate, ilzind maces tncidrtwanzive, sh determine fs © tot varus ects nr-n vet dat Spunem el iru y ee accel i GD 6 wir dad exit un rum dea ley (pet graf ode), expec a de la x la y (pentru graf neorientat), oO @) Go) Se vated mali vif de srt 3. Apol se vated prim vecin nevi te13 (corde a vector vom consider odnesceseinas thames fo) deh 4 Visi aol pial vca ea all adel pe Agel vis ps yoo = ‘nevizitat al lui 1, adic& pe 2. in acest moment suntem intr-un nod care nu mai are vec eva, revenin In otal atu pin, Se 1 Vis al are ve victim pe primal dame aco, viral” Vic ¢ an ae Vet eval dec vom reve! tn vari 1, pints sl, Vis 2 mal ue oa ood ‘evi, vicfl 7. Vii vc 7, aol primal vel nevi aM vier opel pin vca novi al hd, ch 5, Vs suena vst era 2a rove in 10. Nei vl 10 alae von nvisin dot revise ci vir 7 nl re vc eva revenim in. tpl revel rao! a Virh 9 mal ace an ven sevaiat ~ vr 9 Vi vst a, apo owe ‘Yarful 9 nu are vecini nevizitati, revenim in varful 3. Cum varful 3 nu mai are vecini tevin sll pie (ed vil de sar), pcergeen lnc Conctstoniad,ordiea in ee su vette rule gulls pscargerea DF Sahamisenirn ries Vari oi 12 an fos ze, Scars ma sunt sce in vir 3 Anand parurgerea tn alicine, doscem el vitals sum export Mt exdnca laverl a satinger™ ly, meceaom ear poe implementa wcied Sivt. Prin urmare. peuru conse lariat se" inpune o'aooenr venta pecrgei DES Reprecenareainformatior 1 Graf va eprezenat prin ste de adiaceo,memeras in tabou pe por Oa etre de dace alt mami viru din 2 Pent a rie care viru fot dja veka ta mpl pattrger vom lle, i vecor vie, can compenene dia mulinea (0,3) eu eauieaga ist eck vir fos dea alas pena, na cone. ‘Considerim c& variabilele n (aumirul de varfuri din graf), a (listele de adiacenga) ‘siviz sunt globale. De asemenea, considerm cd la vizitarea unui varf va fi afigat pe San sunita, 1.5. Parcurgerea grafurilor Parcurgerea unui graf presupune examinarea sistematicd a varfurilor grafului, cu scopal prelucririinformarilor asoiate varfurilor. ; [Existi dou metode fundamentale de parcurgere a grafurlorparcurgerea in adincime (Depih First Search ~ DFS) si parcurgerea in lime (Breadth First Search ~ BFS). Parcurgerea in adancime Pacureres inepe cu un vet inl demu vit de stat, Se vitae mal ai virfl de Sar. avian un vrt se efcuead supa informafilor ste rll o seri d opera peice probiene! Se viteah apol primi yesh evita al visul de‘ san, Vil y exe conser vernal vr act ens chia x, Gey graf con), respee areal (xy) (Get gree) Se vatat fn eontimare primal vsin nev al prin vein vr sat asa mai depart erg in adacine pink end ajungem inun vit ere ital ae vera nevziag. Clnd aungem iniean atl de vat, even la vf Siu pine (irl din ate aes nod a fot va), Dach acest ve al ae vei evi aegem primal vera vz als comin pcargeren Insel fod, Dac nif acs vt al are vei nevin reve tn ru i pine ‘i continuaim fn acelasi mod, pind cind toate varfurle accesibile din varful de start sunt vizitate. PROGRAMAREA IN LIMBAUL CICS PENTRU LICEL void DES(int x) (int i; (ivizitan varful x printf ("ta *, 20; viz(xl=1} //parcurgem lista de adiacenta a varfului x for (in1) i<=A(xj[0]7 i++) de (iviz(abd (11) (VAI TT este un vecin nevizitat al lui x DRS(A(x](1]) Parcurgerea in Iefime Parcurgerea in litime incepe, de asemenea, cu un varf intial, denumit virf de start. Se viziteazi mai intii varful de start. Se viziteazi in ordine tofi vecinit nevizital ai varfului de start. Apoi se viziteazA in ordine toti vecinii nevizitati ai vecinilor varfului de start si asa mai departe, pan la epuizarea ruturor varfurilor accesibile din varful de start, Exemplu SG parcurgem in Litime graful parcurs deja tn adincime, considerind drept varf de start varful 3. ait Se vizitear mat ini vaefol de start 2. Apoi se viziteax8, in ordine, vecini | lui 3, deci 4,5 gi, Se vziteaztapoi, in ordine, vevnii nevzita ai lui | 4 (vérfurle 2 st 2), apoi ai hui 5 (varfl 20) st apoi ai lui 9 (care mu are vecini | revista) Se viiteaz4 apoi vecnit vaefului (varfurile © si 7) si parcurgereas-a| Incheiat (deoarece varful 2 nu mai are vecini nevizitasi, nici varful 10 si aici F varfurile 657). Concluzionind, ordnea tn care sunt vizitte varfurile grafuli la parcurgerea BES | cu veil de sar 3 est 3, 4,5, 9, 1,2, 30, 6,7 ‘Observati a si in cazul parcurgerii in lasime varfurile @ si 11 nu au fost vizitate, deoarece nu sunt acoesbie din vrful 3 ‘Analiziné parcurgerea in lijime deducem eX virfurile sunt explorate exact in cotines gatigeri” lor, nceanisin cate poste ft inypleneatat wlan o coad -TEORIA GRAFURILOR « Descrierea algoritmului 1. Inigializim coada cu varful de start si vizitim varful de start 2 Cat timp exist elemente in coadd executim: = extragem din coadi primtl element; = parcurgem tofi vecinit elementului extras, identi _acestia vor fi vizitai si vor fi plasati in coal \du-i pe cei nevizitayi Reprecentarea informatilor 1. Graful va fi reprezentat prin liste de adiaceiyé, memorate in tabloul a; pe pozitia 0 a fieedei liste de adiacenti se afld numirul de virfuri din list Peni a retine cate vrfuri au fost deja viztate in timpul parcurgeii, vom uiliza 1m vector viz, cum componente din mullimea {0, 1}, cu semnificafia vie (41=1 dacd virful i @ fost deja vzint, respeetiv 0 fa eaz contrar 3. Vom utiliza o coada implementati static int-un vector ¢ eu n elemente, in care resinem virfurile in ordineavizitci lor. Variable prin gi uLeim retin pociia de Incepu, respect poziia de sfisit in cond. Considerim ci variabilele m (numirul de virfuri din graf), A (lstele a adiacentip, ¢ (coada) si viz sunt globale. De asemenea, considers c& la vizitarea ‘anu varf va fi afigat pe ecran numarul acestia void BFS(int x) Tine £, prim, ultim; /iizitem varful de stert printé(*ed", x); //initializam coada cu varful de start cro: while (princsuitim) //cat tinp coada nu este vida (/yextragem un elenent ain coada xeC(prime]; //parcurgem Lista de adiacenta a varfului x for (ist; ie=afz] (01; i+) de (viz (alx) (111) //afx] [i] este un vecin nevizitat al lui x Ui vases print! ("4d viz tale (111 c(+salein) + Ale) (41): (x) i]; //42 plasam in coada ) Observasit 1. Parcurgerea in lijime are o proprietate remarcabili: fiecare vast este vizitat pe cel mai scurt drum/lant incepind din varful de stat. 2. Complexitatea timp a algoriilor de parcurgere in adancime si tn lijime a unui traf depinde de modalitatea de reprezenare a acestia liste de adiaceng’, complexitatea este O(a). de adiacenss, complexizatea este O(0? ‘In cazul reprezentirié prin In cazul reprezentiri prin matrice 2 ‘ROSRINAREA WUNRArLL CIC RETR ICEL room marino 8 ‘wold Afisare_pran() Tine posed, 2) crun(itax); Aplicagit ‘df (iviztyl) rintt(*Varful td mi este accesibil ain ¢€\nt; y, 207 Determinarea celui mai scurt drum/lan intre dowd virfuri ‘arml0)=y; Fie ¢ un graf (orienta sau neorentt) six, y dowd virfuri din graf. Si se (White. (vie{drumtpoz}}!=-2) determine cel mai scurt drum (respectiv lang, penta cazul in care gral este dzun(++poz]evi2(drum(poz-t)); for (ispony ised! is) neorientat) de la x lay. Solujie ‘Vom uiliza propriewtea parcurgerii in lime de a viaita fecare virf pe cel mai scurt drunvlant care pleacd din varful de sart. Prin urmare, pentru a determina cel ‘ai scurt drum de lax lay, vom efectua o parcurgere in lime Incepénd din, pan cand atingem varfuly, sau ni cdnd vzitim toate vifurile acesiile din x. Pentru a reconstitui drumul, vom modifica semnificaia vectorului viz. Mai exact, viz ij dact 5 este virful parinte alli i, adicd dacd viral é a fost vizitat rin parcurgerea arcului (3, ) (sau a muchiei (3,1), respectv o dack vacful ma a fost vizta. Singurul varf Viitat care mu are Viet plrinte este viral de start. Prin convene, stabilim viz] =-1. Funesia de parcurgere in litime, modificatt astfl incdt st permit reconsttuirea clu mai scurtdrumvlant de la Ia este void BP5(int =) ae { pein, uleim, vigixl=-1; //viziten varfol de start C(O}=x; prinsultined; //inieializan coada while (prine-ultim && !viz(y]) /cat timp coada nu este vida ei au am vizitat varful y Geclptimes]; //extzagen un elenent din coada Lista de adiacenta a varfului x (x) (0); +e) AE Gvietaca tii) J/M(x) (i) este un vecin nevizitat al lui x (iglaGd ile 7/31 viniten Clevultsm]=a(x) [4]: } //1 plasam in coada i Reconstituirea drumului/langului se face in sens invers, pornind de la varful y, ddeterminand apo} pirintele siu (memorat in viz(y1), apoi parintele paintelui séu (memorat in viz{viz(y] ]) si asa mai departe, pani cénd intilnim un varf care mu are plrinte (acesta este varful de statt x). Pentru a afiga drumul in ordinea fireasc&, il vom memora int-un vector auxiliar, denumit aux, apoi vom afisa vectorul de la sirsieclitre inceput. printf ("ta , drumCil) peinte("\n"); ? Bipartit Fie c un graf neorientat. Si se veriice dact grail c este bipartt Soutie Yom parcurge toate varfurile grafuli, incercénd site separém in dowd multi, ste inet oriee muchie din gref sk aibs o extremitate in prima multime si cealalit extremizate in cea de-a doua mulime Mai exact, vom alege un varf din graf a varf de start si fl vom plasa tn prima snuljime. Tog vecinii varfului de start trebuie si fe plasati in cea de-a dous muljime, Veciniivecinilor virfului de sta: vor fi plasai in prima mulime si asa mai depart. ‘act in timpul parcurgerii ua varf care a fost deja vizitat si asfel a fost plasat in una dintre muljimi este vizitat din nou, iar la noua viztare varful ar tebui plasat in cezalalel mulgime, deducem eX praful neste bart Este posibil ca mu toate varfurile grafului si fie accesbile din vaeful de start ales, Prin urmare, daci mai exist viefuri nevizitat, reluim parcurgerea pind cind toate ‘arforile sunt vizitate Gau am detecat fapnul ci graful nu este bipati), alegind de fiecare dati ca virf de start unul dine virfurile neviztate. Pentru a refine modul in care varfurle grafului sunt partsionate in cele dou iuljimi, vom modifica semnificyia vectorull viz astfel: viz (4)=1, dacd virfl 4 a fost viztat si plasat in prima muljime, viz(1)=2, dact virful i a fost viziat gi plasat in cea de-a doua mullime gi respectiv viz (i)=0, daca i mu a fost vizitat Pentru a parcurge varfurile grafului putem utiliza oricare dine cele dow’ metode de parcurgere. ‘Vom modifica functia de parcurgere astfel incét s& remumneze valoarea 1 dacd smuliimea virfurlor accesible din varful de start genereaza un subgraf bipartit $i respect 0 in caz conta. ine BFS(ine x) (doef, prin, al /ivizivem varful de start vizixl=t; (/eat timp coada ma este vida (Uvexeragen un elenent aan © xeCIprime+); “ PROGRAMAREA IN LIMBAJUL CIC++ PENTRU LICEU TeORIA GRAFURILOR. g (/parcurgen Lista de adiacenta a varfului x Ant DPS(int x, int px) for (ist; L<=A(x] [0]; ir+) e Af (vig [Abd (11) ant i; J/A[xI {1} este un vecin nevizitat al lui x vizix]=t; (//A1 plasam in cealalta multine decat x for (is1; ic-alx} [0]; i+) viz (ale) (A) J=3-vi Ox) 7/31 plasam in coada Cevuleim)=Alx) (1); else /* varful este vizitat, verifican daca este plasat in aceoasi miltime cu x */ de (viz fala) (i) }=evizG) return 0; ) return 1; ) in functia main () apelim functia de parcurgere pentru fiecare varf nevizitat : } xan && Ok? t+) Se Uvighel) ok=ok && BES(x) 7 Af (ok) print#(*Graful este bipartit\n") else printf (*Graful nu este bipartit\n"); Aciclic Fic G un graf neorientat Si se verifice dact graful ¢ este acicic (au confine cilur) Solugie (© prima solute ar fi sé construim matricea inchiderit tanzitive a grafului ¢ si apoi si verificim dact am obginut valoarea 1 pe diagonala principali (caz in care sgraful confine ciclur). O astfel de abordare are complexitatea O(n’) ( solutie mai eficienti este de a reprezenta graful prin liste de adiacenta si de a realiza o parcurgere in adéncime a grafului ‘Dac’ in timpul parcurgerii in adincime intdlnim un veein y al varfului curent x ccare a mai fost deja vizitat, exist dow’ cazuri posibile = — y este varful plrinte al varfului curent x; = y este un varf care a fost viztat in prealabl (deci exist un lang de la y la x) si ‘existd miuchie de la x la y; in concluzie, din langul Cy, ..., ©) si muchia [x,y] se formeazt un ciclu ‘Vom modifica functia de parcurgere in adancime pentru a detecta cicturile astfe] funcjia va returna valoarea 1 daci multimea varfurilor accesibile din varful de start genereazi un subgraf aciclic si respectiv 0 in caz contrat; = functia va avea un parametru suplimentar (pe langa varful curent, vom transmite cca parametru si varful périnte al vérfului curent, pentru a putea face diferenta intre cele douk cazuri posible). Ae (iviztaGe (111) {Af (IDES(AGe) (11, x)) return 0;) ale . Af (px!=AGd [1]! xeturm 0; return 1; > Deoarece este posibil ca nu toate varfurile grafului si fie accesibile din varful de ‘Sart, in functia main() va webuie si apelam functia de parcurgere de mai multe ori, © dati pentru fiecare varf nevizittidentificat : imt x, oke2; for (x01; xeon Ge ok; x-+) df Civiztx) Ke bk DFS(x, -2) if (ok) print# (*Gragul este aciclic\n*); else print#(*Graful mi este aciclic\a"); Exercitii propuse Se 4X graful din figura urmitoare, Si se parcurgi acest graf in adincime si ia lime incepénd din varful 5. . Dati exemplu de un graf pentru care parcurgerea in litime coincide cu Parcurgerea in adncime (ambele parcurgeri avnd drept virf de start virful 2). ‘Si consideriim urmitoarele secvente de visfuri objinute prin parcurgerea in adincime, respectiv in lstime a unui graf orientat eu 7 virfuri, Dati exemplu de. tun graf orientat prin a c&rui parcurgere in adncime si apoi in lime si obginem_ seeventele specificate Parcurgete in adncime: 1, 2, 3, 5, 7, 6,4 Pareurgere in ljime: 1, 2, 3, 4,5, 6.7 : ' ' | 6 PROGRAMAREA IN LIMBAJUL ICH PENTRU LIC 4, SX considerim cf, dupii o parcurgere in latime modificatl astfel incat vectorul viz si permit reconstiuirea celui mai scurt drum de la varful 7 la varful 2, continutul vectorului viz este if peers reece eg Tae Care este lungimea celui mai scurt drum de la 7 la 2? 5. Se consider un graf neorientat complet reprezentat prin matrice de adiacengi. Care dintre urmitoarele afirmatii sunt adevirate a Parcurgerea in lifime coincide cu parcurgerea in adincime a grafului, indiferent de varful de start. ». Pentru a parcurge toate varfurile grafului, functia de parcurgere in litime tuebuie apelati de mai multe ori, c. Parcurgind graful in adéncime, tncepand din varful 1, se obtin varfurile in ordinea crescitoare a numerelor lor. 6. Implementati parcurgerea in adancime si parcurgerea in lijime a unui graf reprezentat prin matrice de adiacengi. 7. Testati dacd un graf este bipartit utlizand parcurgerea in adéncime, 8. Scriefi o funciie care si determine mumérul de varfuri accesibile dintr-un varf specificat al unui graf neorientat, 1.6. Conexitate Un graf se numeste conex dact oricare ar fi x si y varfuri din graf exist lant intre x siy. Exemple a Graf neotientat conex: | Graf orientat conex: | Graf neorientat neconex (de exem- plu, inte varfurile 2 si 3 nu exist D> g5v LP ‘Se numeste componentd conexd un subgraf conex maximal eu aceasth proprietate (adie, dacé am mai adiuga un varf si toate muchiile/arcele incidente cu acesta, subgraful obginut mu ar mai fi conex). TEOMA GRAFLRILOR. a Observatit rice graf neconex contine cel putin dou componente conexe. De exempla, ‘graful neorientat neconex din exemplul precedent are exact dod componente ‘conexe : subgrafurile induse de multimile (3, 4} si (2, 2, 5} ‘Componentele conexe ale umui graf sunt disjuncte Demonstragie, Si presupunem prin reducere la absurd c& existh c, si C2, dou ‘componente conexe, astfel inet cc, 0. Fie x un varfeare aparfine inersectieh ‘celor dou componente conexe. Considerim ¢; componenta conexi cea mai mpl si y un varf din c,-c,, Deoarece x sty apartin componentei c;, deducem (ch existd lant de la y la x. Deoarece x aparjine si componentei c;, deducem ‘exist lant de lax la orice alt vicf din c,, Prin urmare, exist lan de lay la orice alt varf din c,, Cu alte cuvinte, c, mu este maximal (am putea adauga varful y, ‘subgraful rimindnd conex), ceea ce este in contradict cu presupunerea ficutd Componentele conexe ale’ grafului constituie o partie a multimii varfurilor ‘rafal. Descompunerea unui graf neorientat in componente conexe ‘A descompune un graf in componente conexe inseamnd a determina wate compo: sentele conexe ale grafulu ‘A determina componenta conexi a unui virf x presupune a determina toate virfurile accesibile din varful x; deci este suficient si realizim © parcurgere rafului in latime sau in adéncime) ou varful de start x. Pentru a descompune graful in componente conexe, vom realiza céte o parcurgere pentru fiecare component conesi (selectind ca varf de start varful nevizitat avand ‘aumiir minim). Observaii - Pentru a testa dact un graf este aciclic sau bipartit, am testat flecare component conexa a grafului >. Pentru a descompune un graf orientat in componente conexe, se va face abstractie de orientarea arcelor, 5. Pentru un graf reprezentat prin liste de adiacengi, descompunerea in componente ‘conexe utilizand parcurgerea grafului are complexitatea O(a+n). Dacl graful este reprezentat prin matrice de adiacentS, descompunerea in componente conexe utilizind parcurgerea grafulu. are complexitatea O(x") Descompunerea tn componente conexe a uoui graf neorientat reprezentat prin lista muchilor Dack graful este reprezentt prin lista muchllor, descompunerea grafuui in ‘componente conexe utilizénd parcurgerea grafulul este ineficient. ‘Vom considera c&, initial, eraful nu contine nici o muchie, deci este format din a ‘varfuri izolate, flecare varf forméind o component conex’. ‘Vom parcurge lista muchiilor grafului, adfugind in graf muchiile una cite una. { 48 PROGRAMAREA IN UMBAJUL CIC-++ PENTRU LIEU SS _____recrainea ieuneoni cies renmuucsy La adiiugarea unei muchii pot apirea dowd cazuti |. extremitijile muchiei sunt in aceeasi componenti conex4 (in acest caz, prin adiugarea acestei muchii nu se modifi’ descompunerea in componente conexe a srafului) ; 2. extremitifle muchiei sunt in componente conexe diferite (ia acest caz, prin ‘adiugarea acestei muchii, componentele conexe corespunzitoare celor’ dou cextremitii se unifica). ‘Vom retine evidenta componeatelor conexe ale grafului eu ajutorul unui vector ¢ cu_n componente, c(i} =reprezentantul componentei conexe din care face parte varful + (prin convengie, vom considera drept reprezentant vrful cu numiral cel mai tic). Inifal: C{1=i, pentru orice Hinclude define max 101 define meax RMax* (NMAX-1) /2 typedef struct (int x, y;} Michie; Michie Gitex); int Clix]; void citire() void Desconpunere_comp_conexe(); void afisare(); int main() citire) Descompundre_Comp_conexe(); agieare(); return 0; i void citire() FILE * fin-fopen(*graf.in*,*r*) ant i; fscanf(fin, "84 ed, en, am); for (1-0; dem; i++) fscanf(fin, "84 €4°, £G[1).x, eG{Ll.v); ) void Descompunere_comp_conexe() Ane. for for in, max: } deen ie) 1d fem: de) Af (C(GE31 x1 =C1G(5}.¥1) [TEORIA GRAFURILOR /* extremitatice mchiei j mu sunt in aceeasi compenenta conexa */ “de (CIGE] x1 #include define Nase 101 int ny ar, nrc: int *'a(ntaxd),'* AP(NMaxt Ant postoraing(Nmax], viz Nex]; void citire(); void DPS(int) ; void DFS?(int); int main() ne i; citire(); //parcurgen gratul DFS, determinand ordines varfurilor for (isl; icsn; i+) se (1vibti}) DPS(i); /* parcurgen DFS graful transpus, prelu postording */ for (isn; i50; i Af (viz[postoraine[i11) /* componenta tare-conexa din care face parte varful Curent mua fost determinata */ {printf (*Componenta tare-conexa 4d: *, ++nre) DESP(postordinelil): printf(*\n"); } retura 0; nd varfurile in void citire() {//eonstruim graful si graful teanspus BILE * fin-fopen(*graf.in*,*r*): ime x,y, my, iy Escant (fin, "4d #4", Gn, Gn); //aloc memorie pentru gradul fiecarui varé for (ist; icsn; i++) (AU]=Gnt *) realloc (ali) , sizeof (ime): ALA} [0] AT[{]=(4me *)reatloc(Ar{i], sizeof (ime) }; ‘aP{i][0}=0; i for (1-0; icm; ite) (fscant (Fin, "8d 8a", Ge, ky): ADC) [0] +45 AD (ate) (0]+1) *aizeoe (int); AGE [AGA [0] arly) [0] ++ ADlyl= (int *)xealloc(Atly], (Aly) (0]+2)*sizeof (ime) ); arly) (Atly] (01 }=x; ) > void DFST(int x) (ant i; £(" sat, 2a: j Acsarld (01; i++) de (vizfarpd [41)) DFST(AT Ex] (41) f desaGe) 1017 is+) de (iviztabd 111) DeS(A(x] (41); postordine[++nr]= > Observatie Pentru graful reprezentat prin liste de adiacenti, complexitatea algoritmului Kosaraju-Sharir de descompunere in componente tare-conexe este de ordinul O(nsn), Exercifii propuse 1. Se considera graful orientat din figura urmitoare, Descompuneti graful in compo! se 6, PROGRAMAREA IN LIMBA CIC 4+ PENTRU LCBU ORLA GRAFLRILOR ss Observatie Fiecare component conexi\a unui graf aciclic neconex (pdure) este un arbore. Exemple QO a oe FB Pro o0 Se considers graful orientat cu ne23 varfuri si mulkimea arcelor: {(1,5), (B,D), (6,1), (6,7), (7,8), (7,10), (20,8), (8,9), (8,12), (12,10), (9,12), (4,3), 22,4), 3,22), (3/19), (19,38), (28,3), (22,16), (22,17), | (46,17), (20,16), (27,20), (20,21), (26,21), (22,2), (22,13), (23,12), 43,2), (45,2), (14,2), (14,15)}.. Descompunesi afl in componente tare-conexe. Construiti un graf tare-conex eu 7 varfuri si cu numer minim de arce. Se considera graful orientat din figura urmétoare. Care este numérul minim de arce care trebuie si fie adugate astfel Incdt graful si devin’ tare-conex? ‘Se consider un graf orientattare-conex. Stabilifi numarul circuitelor care contin Toate varfurile grafului. . cel pusin unul a, exact unul nici umol 4, cel mult unul (@acataueat, ite 2003) Se consideti un graf orienatcu 9 virfuriasfel init, pentru orice i, exist cite un are dela vel $ In vr 2°% sila viful 2*S+2 (pentru 2*43, respeetiv 24189), precum si arcl (3,1). Cate componente tae-conexe are acest erat? Serioti un program care si realizeze descompunerea in componente tare-conexe @ nui graf oriemat pe baza matieiinchieri tranztve a grafulu Scriefi un program care sf consruiasci graful condensat al unui graf orienta. fn graf condenstt exist un virf pentru fecare component tare-conexa a graflui dat. Exist are dela vrful x la varful y in grafulcondensat dac exis cel asin tun drum de la un vist sinat in componenta tre-conexk corespunzitoae vari x, la un vif situa in component tare-conex3 corespunzatoare vrfului y 1.8. Arbori ‘Un graf neprientat conex $1 acetic se numeste arbore. Un graf neorientat acclic si neconex se numeste padure, Graful este un arbor, deoarcce este conex | Grafil este 0 pldue, deoarece exe © © © YT QOD SY Ood SO © @ J Teoremé de caracterizare a arborilor Fie ¢ un graf neorientat cu a varfuri. Urmitoarele afirmatii sunt echivalente 1. G este arbore. . Oricare dowt varfuri din ¢ sunt unite printr-un lang simplu unic este conex minimal (daca suprimim o muchie, graful obyinut este neconex). Geste conex si are n-1 muciii. este aciclie si are n-2 muchil, este aciclic maximal (daci adaugiim o muchie, graful obyinut contine ciclui) Exercitu propus Demonstraji teorema de caracterizare a arborilor, considerind in ordine implicatile 1. > 2.33.3 4,>5.36.> 1. Déterminarea unui arbore cu secvenja gradelor datit Teorem@s Numerele naturale 02 altel incit, dacd @*=1, VEe(L, 2, .., m+} > 44d" y+. . 44" giantd2n, ‘Si considera urmatoarea secventi de m mumere fatregi &', .0y d's, @*ai-1, cu proprietatea cl a +...14',+¢*_..=2n-2. Din ipoteca inductiv, existd un arbore A, cu n varfuri si seeventa gradelor a2, ..., 2’ 4°qan1. Adaugiim la arborele A, un vvief pe care il unim print-o muchie cu virful avand gradul d'.,.~1. Obfinem un arbore Ayn Cu gradele Varfurilor 4°, €'ssn. Qos De exemplu, pentru n=11 si sirul gradelor: 8 re ‘Vom refine gradele varfurilor intr-un vector a, ordonat erescitor, cu suma componentclor egala cu 2n-2. Pentru a retine arborele este suficient $4 rejinem pentru fiecare varf terminal ,eliminat” din arbore si virful neterminal cu cere este adiacent. Spre deosebire de ideea din demonstrate, pentru a conserva ordinea in vectorul 4, la fiecare pas al algoritmului, gradul care va fi decrementat va fi primul grad mai mare ca 1. si mu ultiml. int 4, VER, vane; for (isi; dem; i++) steadily de (s!=2"(n-1)) foute<"Suna gradelor trebuie ea fie 2(n-1)!\n"s else for (Vf9=1; veTen; VET++) U/detemin primul vart neterminal for (VEN alvery avant) - Observate ‘Aces lgoritm construct sugereazi o metoda foarte efcienti de fpredentare a (iibitlor! Dacé a, este un arbore eu vacfrile x, x5. oy x suprimim vacfal vance); ‘TeoRIA GRAFURILOR s ‘terminal cu cel mai mic indice si muchia incident cu acesta si retinem a,, varful adiacent cu virful terminal suprimat. Am obyinutastfel un subgraf cu a2 muchit conex si avilic, deci un arbore Ay. Repedim procedetl pentru arborele’n. determindnd vn al doile vir, a, adiacent cu varful terminal de indice minim ce va fieliminat din s.. impreund ca mucha incident cu el s.a.m.d., pind cénd se obyine un atbore a eu dous virfuriatiaente ‘Am dina asf! un sistem fa, a3 ys} de m-2 muMETE (20,50, VEE(L, 2, Js --2})asociatatborel a, munit dl Priffer ali Se poate demonstra ci exis 6 corespondeattbiunivock intre muljimea arborilor A cu n varfuri si multimea sistemelor {a;, a2, ..., ana}s €{2, 2, ... a}, Vief{1, By anny 1-2}. Folosind acest rezutat, delucem cé mumarul arborilor ce se pot consrui culm ‘varfuri date este egal cu n"* (aumérul functiilor definite pe o multime cu n-2 elemente, cu valor! inv-0 mulgme eu n element). Aceast formula poart numele de format lui Cayley Exerciii propuse 1. Se considera graful neorientat din figura urmitoare, Care dintre componentele conee ale graf sunt arbi? OG @ oY © OSo \S oS 2. Se considera urmitorul graf cu 7 varfuri si 6 muchii, reprezentat prin lista ‘uchiilor. Este acest graf un arbore? Tae se 3 ts ts tes 3. ‘Si-considerim un graf complet cu 6 varfuri. Cate muchii rebuie sé fie eliminate din graf pentru a obgine un arbore? 4. Un graf neoriemat are 20 d= varfuri, 30 de muchii si 5 componente conexe, Cate ‘muchii trebuie si fie eliminate din graf pentru a obgine © pidure ? 5. Stabili care dintre grafurile urmatoare este un arbore KK YY (Simulare Bacataureat, 2003) 8 PROGRAMAREA IV UMBAIULCIC-H+ FENTRU LCE 6. Memorarea unui arbore cu ajutorul matricei de adiacenti este 0 metoda 4. ineficientt ». eficienta ©. recomandabili —d. incoreett (Bacalaureat special, 2003) 7. Se considera graful neorientat dat prin matricea de adiacengl urmatoare. Stabilii daca se poate obgine un arbore prin eliminarea unora dintre muckiile grafului Loin eee prin eliminarea exact a unei muchii, prin eliminarea exact a dou’ muchii, Da, prin eliminarea exact atrei muchii Nu, (Bacalaureat, julie 2006) 8. Se di urmitoarea secventi de numere naturale: 4, 3, 3, 1, 1, 1, 1, 2,188 se verifice dack aceasté secventi poate fi secvena gradelor unui arbore. in caz afirmativ determinati un arbore cu aceasti secventi a gradelor. 9. Se consider urmatorul cod Praffer: 3, 4, 4, 6, 6 7, 9. Si se construiascd arborele codifica. 10, Demonstrati ci virfurile oricirui arbore pot fi colorate cu dou’ culori astfel {neat oricare dou varfuri adiacente si fie colorate diferit. 11. Fie un graf neorientat reprezentat prin: a. matrice de adjacent’ b. liste de adiacents ©. lista muchillor Scrieti un program care si verifice dack graful este arbore. 12. Scrieti un program care s& genereze toi arborii cu n varfuri 1.9. Arbori partiali ‘Un graf partial conex facile al unui graf neorienat se numeste arbore paral, Exemplu rafal ilustrat tn figura din dreapta este un arbore parfal al grafului din stinga, GSS |e Ko -TEORIA GRAFURILOR 2 Teorema 1 Condiia necesard si suficierti ca un graf si contin cel purin un arbore partial este ca graful si fie conex. Demonstratie Necesitatea. Presupunem ci graful admite un arbore partial. Arborele partial este conex si adiugind muchile care sunt in graf, dar mu sunt in arborele partial, el riméne conex. Deci graful este conex, ‘Swjicienga. Presupunem cd g-aful este conex. Dack graful este conex minimal, el este arborele partial cdutat. All, exist o muchie (x,y), astfel incdt graful partial G obsinut prin climinarea muctiei (x,y) este conex. Dac ¢, este conex minimal, arborele partial ciutat este G,, altel continum procedeul de eliminare a muchiilor pnd cénd obfinem un graf conex minimal, care va fi arborele partial cfutat, Teorema 2 Fie c un graf conex cu n varfuri sim muchii, Numrul de muchii ce trebuie eliminate pentru a obsine un arbore partial este m-n+1 (acesta se numeste numdirul ciclomatic al sgrafulu). Demonstrate Presupunem eX prin eliminarea unui yumir oareeare de muchii din ¢ am objinut un graf c* firdcicuri (0 pidure) Flecar® dine componentele conexe ae Ii G* est um arbore. Si notim eu p numéral componentelor conexe, eu n; nunirul de virfuel din componenta conext i, unde L¢{, 2, .., p} si cum mumirul de muchit din componenta conexd i, i€(2, 2,...,p). Evident cl m=n,-1, Vie{L, 2, Bh Numiral de muchit din este (n.-1) + (my-2) sur (np) eliminate m-n+p muchil. Cand 6" este arbore, deci conex ( eliminate este n-n2. Arbori partiali obtinuti prin parcurgerea grafurilor Prin parcurgerea unui graf reorientat conex fiecare virf din graf va fi vizitat 0 singurd dati. Exceptind varful de start, penteu vizitarea fiecArui varf se utlizeaza 0 ‘singurd muchie a grafului. In total pentru parcurgere au fost utilizate n-1 muchii (denumite sree edges) care nu formeaza cicluri, deci care constituie un arbore partial al grafului dat. Observai 1. fn cazul in care graful parous nu este cones, parcurgerea se repet penruflecare componenti conexf, objinindu-se o pldure, format dit arbor paral orespunzitor fecirei componente conexe. 2. Prin parcurgerea unul graf orient se obine 0 arborescengs (graf orienta fra circ, in eae fecare vt ete acces dn irl desta, Prin parcurgere, muchiile grafului pot fi clasificate in 4 categorii 1. Tree edges ~ muchiile arborelui partial; mai exact, [x,y] este tree edge daci si hnumai daca varful y a fost vizitat explorand muchia (1, ; 2. Back edges ~ muchii care nu apartin arborelui parjal si care conecteazi un varf dde un siramos al siu tn arborele partial (adicd muchii de forma (x,y) care | cconecteazi pe x de un varf y aflat in langul de la varful de start la x mai aproape de varful de start decdt x); 3. Forward edges ~ muchii care mu apartin arborelui partial si care conecteaz’ un vvarf de un descendent al séu in arborele partial (adici o muchie de forma (x,y) care conecteazi pe x de un varf y, astfe} incét x se afld in lanqul de la varful de start la y mai aproape de virful de start decit y) ; 4, Cross edges ~ toate celelalte muchii. Exemplu o FROGRAMAREAN LNGRAJUL C/C++ FERRY LCE lasificarea muchilor | | | | | ee | ‘Am figurat cu linie continua ingrosati muchiile din arborele partial DES (tree edges) si cu linie intrerupta muchiile de intoarcere (back edges). Observesii 1, Un graf (oriemtat sau neorienta) este aciclic daci' nu contine mu (ack edges) de intoarcere ORLA GRAFURILOR 6 2. Prin parcurgerea in adincime a unui graf neorientat, muchiile pot fi clasficate doar in muchii ale arborelti partial DFS (rree edges) sau muchii de intoarcere (back edges). Demonstratia o propunem ca exercitiu ‘Si parcurgem acum acelasi graf in Litime ineepdind cu vaeful 2, Am figurat cu linie continut ingrosati muchiile arborelui partial BFS (tree edges) sicu linie punctatécelelalte muchii (cross-edges) Observatii 1, Pentru orice virf x din graf, lanqul nic care uneste varful de start de x in arborele parjial BES reprezinti un lant cu numér minim de muchii de la varfal de start la x in graf. Lungimea acestui lant o vom numi distanga de la virful de start lax si 0 vom nota a(x). 2. Prin parcurgerea BFS a unsi graf neorientat muchiile pot fi clasificate doar in ‘define MiaxVE 50 Sdefine Mazmichii NMasWE* (Maxve-1) /2 L struct Muchic (int el, ©2, cost; ); muchie {mMaratuchii] ; nt AlNMAXVE], ¢(NMaXVE] + iat 2, m7 | i | “ PROGRAMAREA IX IMBAJLL CIC PENTRU LICE void Initializare() ‘ int i; ifstream fin(*Kruskal.in*) p deem; ise) fin>>¢[i] .e1>>¢[1] .22>2cL1 .cost: for (jel; deen; ies) efiled; fin.close(); void afisare() (int i, Costamed; cout<<*Arborele partial de cost minim este :\\n"; for (isl; lear ite) (couted" [*<=x.cost) j--1 G(i}=6(41; while (icjeso[i] .coste=x.cost) itt: s(]=6(4] } Gils: Sortaremuchii(st, i-1); SortareMuchii(i#l, a2); y i int main() (Cine i, 3, min, max, NeMsel: Initializare(}; Sortaremuchii(i, m): :/// mumarul de michii selectate }) Newselen-1; i+) 4€ (cIG[i] .e1] !=cteti-e2)) // machia i nu formeaza cicluri cu cele deja selectate C// selectez mechia i AL+eNrnsel]=1; // unific componentele conexe ale extrenitatilor ke (clot) et) seats) 231) (mineo({i} et]; maxecIG[il.@21; } ee ee Atisare(); return 0; d Teoremé Algoritmul lui Kruskal genereazi un arbore partial de cost minim. Demonstratie 1 Algorimul selectazi numiral maxim de muchil care mu formeazt citar, des, ‘conformn teoremei de caracterizare a arborior, se obfine un arbore partial. | 2. Si demonstram ci arborele partial objinut in urma aplicérii algoritmului tui ‘Kruskal este un arbore partial de cost minim. Fie A=(ai, 8s tn ordinea selectrii lor. Presupunem prin reducere fa absurd ci arborele obtinut nu este de cost minim, + So-s') Un alt arbore partial, astfel incét ¢(A" ) ‘define méaxvé 100 ‘define Inf 10000 amt on, r, i, véMin, nv; double c{retaxcve) (Nave) ; int plNaxvE}, Z(sMaxvE]; @ouble cnin{laxvt), cestiin: void Initializare() « int i, 4, double c Lfotrcam fin(tpeim. int), Homer; Jhemodd de for (isl; Sen; int) for (jel; jko>e; pti} 2Erl=0; ptr Ein.close(); ) void Afisareara() (Came i; @ouble cost=0; coutc<"ichiile APM sunt: * for (ist; ic=n; its) ae (coutee: [‘eeplil

You might also like