Teorie Grafuri Neorintate

Embed Size (px)

Citation preview

  • 7/25/2019 Teorie Grafuri Neorintate

    1/54

    1

    GRAFURI NEORIENTATE

    1. Noiunea de graf neorientat

    Definiie.SSeennuummeetteeggrraaffnneeoorriieennttaattooppeerreecchheeoorrddoonnaattddeemmuulliimmiinnoottaattGG==((VV,,MM))uunnddee::VV::eesstteeoommuulliimmeeffiinniittiinneevviidd,,aalleeccrreeiieelleemmeenntteesseennuummeessccnnoodduurriissaauuvvrrffuurrii;;MM::eesstteeoommuulliimmee,,ddeeppeerreecchhiinneeoorrddoonnaatteeddeeeelleemmeenntteeddiissttiinncctteeddiinnVV,,aalleeccrreeiieelleemmeenntteesseennuummeessccmmuucchhiiii.. Exemplu de graf neorientat:

    G=(V, M) unde: V={1,2,3,4}M={{1,2}, {2,3},{1,4}t}Demonstraie:Perechea G este graf neorientat deoarece respectdefiniia prezentatmai sus, adic:V : este finiti nevid;M : este o mulime de perechi neordonate (submulimi cu douelemente) de elemente din V.

    n continuare, vom nota submulimea {x,y}, care reprezinto muchie, cu [x,y] (ntr-un graf neorientatmuchia [x,y] este aceeai cu muchia [y,x]). n baza celor spuse anterior, graful prezentat n exemplul demai sus se reprezinttextual astfel:G=(V, M) unde: V={1,2,3,4}

    M={[1,2],[2,3],[1,4]}

    n teoria grafurilor neorientate, se ntlnesc frecvent noiunile:- extremitile unei muchii

    fiind data muchia m=[x,y], se numesc extremiti ale sale nodurilex i y;- vrfuri adiacente

    dacntr-un graf existmuchia m=[x,y], se spune despre nodurile x i y ca sunt adiacente;- inciden

    dacml i m2 sunt doumuchii ale aceluiai graf, se numesc incidentedacau o extremitatecomun.

    Exemplu: m 1=[x,y] i m2=[y,z] sunt incidente dacm=[x,y] este o muchie ntr-un graf, se spune despre ca i nodul x, sau nodul y, casunt

    incidente.

    Reprezentarea unui graf neorientat admite douforme, i anume:- reprezentare textual: aa cum s-a reprezentat graful din exemplul anterior;- reprezentare grafic: muchiilesunt reprezentate prin linii,

    iar nodurileprin puncte. Exemplu de graf neorientat reprezentat textual:G=(V, M) unde: V={ 1,2,3,4]

    M={[ l,2], [2,3], [1,4]} Exemplude graf neorientat reprezentat grafic (este graful de la exemplul anterior):

    2. Noiunea de graf parial

    Definiie. FFiieeGG==((VV,,MM))unun ggrraaffnneeoorriieennttaatt..SSeennuummeetteeggrraaffppaarriiaall,,aallggrraaffuulluuiiGG,,ggrraaffuullnneeoorriieennttaattGG11==((VV,,MM11))uunnddeeMM11MM..Concluzie:Un graf parial al unui graf neorientat G=(V, M) are aceeai mulime de vrfuri ca i G iar mulimeamuchiilor este o submulime a lui M sau chiar M.Exemplu: Fie graful neorientat:

    1

  • 7/25/2019 Teorie Grafuri Neorintate

    2/54

    2

    G=(V, M) unde: V={ 1,2,3,4}M={[1,2], [1,4], [2,3]}reprezentat grafic astfel:

    1. Un exemplu de graf parial al grafului G este graful neorientat:G1=(V, M,) unde: V={1,2,3,4}

    M1={[1,2],[1,4]} (s-a eliminat muchia [2,3])reprezentat grafic astfel:

    32. Un exemplu de graf parial al grafului G este graful neorientat:G1=(V,M1) unde: V={1,2,3,4}M1= (s-au eliminat toate muchiile)

    reprezentat grafic astfel:1 4

    2 3

    Observaie.Fie G=(V, M) un graf neorientat. Un graf parial, al grafului G, se obine pstrnd vrfurile ieliminnd eventual nite muchii (se pot elimina i toate muchiile, sau chiar nici una).

    3. Noiunea de subgraf

    Definiie. FFiieeGG==((VV,,MM))unun ggrraaffnneeoorriieennttaatt..SSeennuummeetteessuubbggrraaffaallggrraaffuulluuiiGG,,ggrraaffuullnneeoorriieennttaattGG11==((VV11,,MM11))uunnddeeVV11VViiaarrMM,,ccoonniinneettooaatteemmuucchhiiiilleeddiinnMMccaarreeaauueexxttrreemmiittiilleennVV11..

    Exemplu:Fie graful neorientat:G=(V, M) unde: V={ 1,2,3,4}

    M={[1,2], [2,3], [1,4]}reprezentat grafic astfel:

    1. Un exemplu de subgraf al grafului G este graful neorientat:G1=(V1, M1) unde: V1={1,2,3 } ( s-a ters nodul 4)M1=([1,2],[2,3]} (s-a eliminat muchia [1,4J)

    reprezentat grafic astfel:1

    2. Un exemplu de subgraf al grafului G este graful neorientat:G1=(V1,M1) unde: V1={1,2,3,4}(s-a eliminat nodul 1)M1={[2,3]}(s-au eliminat muchiile [1,4], [1,2])

    reprezentat grafic astfel:

    4

    1

    1

  • 7/25/2019 Teorie Grafuri Neorintate

    3/54

    3

    Observaie. Fie G=(V, VI) un graf neorientat. Un subgraf, al grafului G, se obine tergnd anumitevrfuri i odatcu acestea i muchiile care le admit ca extremitate.

    4. Gradul unui vrf

    Definiie.FFiieeGG==((VV,,MM))unun ggrraaffnneeoorriieennttaattiixxunun nnooddaallssuu..SSeennuummeetteeggrraaddaallnnoodduulluuiixx,, nnuummrruullmmuucchhiiiilloorriinncciiddeenntteeccuuxx,,nnoottaattdd((xx))..Exemplu: Fie graful neorientat:G=(V, M) unde: V= {1,2,3,4}

    M={[l,2], [2,3], [1,4], [1,3]}

    reprezentat grafic astfel:

    3

    Gradul nodului 1 este d(1) i d(1)=3 (n graf sunt trei muchii incidente cu 1 )Gradul nodului 2 este d(2) i d(2)=2 (n graf sunt doumuchii incidente cu 2 )Gradul nodului 3 este d(3) i d(3)=2 (n graf sunt doumuchii incidente cu 3)Gradul nodului 4 este d(4) i d(4)=1 (n graf este o singurmuchie incidentcu 4)Observaii.1. Dacgradul unui vrfeste 0, vrful respectiv se numete vrf izolat.

    2. Dacgradul unui vrfeste l, vrful respectiv se numete vrf terminal.n graful care admite reprezentarea grafic:

    1

    deoarece d(1)=0, vrful 1se numete vrf izolat, ideoarece d(2)=d(3)=1, vrfurile 2i 3se numesc vrfuri terminale.

    Propoziie..nnggrraaffuullnneeoorriieennttaattGG==((VV,,MM)),,iinnccaarreeVV=={{xx11,,xx22,,......,,xxnn}}iissuunnttmmmmuucchhiiii,,sseevveerriiffiicc

    eeggaalliittaatteeaa:: mxdn

    ii 2)(

    1

    ==

    Demonstraie:Muchia [x,y] contribuie cu o unitate la gradul lui x i cu o unitate la gradul lui y, deci, cu douuniti lasuma din enun. Cum n total sunt m muchii, rezultc suma gradelor este 2m.

    Avnd in vedere faptul ca suma gradelor vrfurilor dintr-un graf este un numr par (2m), a aprutcorolarul prezentat mai jos.Corolar.nnoorriicceeggrraaffnneeoorriieennttaatt,,GG==((VV,,MM)),,eexxiissttunun nnuummrrppaarrddeevvrrffuurriiddeeggrraaddiimmppaarr..

    Demonstratie:Demonstraia ine cont de propoziia de mai sus, adicde faptul cntr-un graf neorientat suma S atuturor gradelor nodurilor este un numr par (dublul numrului muchiilor).Fie S1 suma gradelor vrfurilor de grad par, (este un numr par, ca sumde numere pare) i S2 sumagradelor vrfurilor de grad impar.

    Cum S=S1+S2, rezultcS2=S-S1, deci un numr par (ca diferende numere pare).

    5. Graf complet

    Definiie.FFiieeGG==((VV,,MM))unun ggrraaffnneeoorriieennttaatt..GGrraaffuullGGsseennuummeetteeggrraaffccoommpplleett,,ddaaccoorriiccaarreeddoouuvvrrffuurriiddiissttiinncctteeaalleessaalleessuunnttaaddiiaacceennttee.. Exemplude graf neorientat complet:G=(V, M) unde: V={ 1,2,3,4}

    M={[1,2], [1,3], [l,4], [2,3], [2,4], [3,4]}Reprezentarea sa graficeste:

    1

    1

  • 7/25/2019 Teorie Grafuri Neorintate

    4/54

    4

    Observaii.1. ntr-un graf complet cu n vrfuri gradul fiecrui vrf este n-1, deoarece fiecare vrf este legat prinmuchii de toate celelalte vrfuri.2. Graful complet cu n vrfuri se noteazcu Knn particular, graful:

    se noteazK4(este un graf complet cu 4 vrfuri).

    Propoziie.nnttrr--uunnggrraaffccoommpplleettccuunnvvrrffuurrii,,nnoottaattKKnn,,eexxiisstt( )

    2

    1nnmmuucchhiiii..

    Demonstraie:Din fiecare vrf x, pleacn-1 muchii, deci d(xi)=n-1, pentru orice i= 1..n Cum folosind propoziiaprezentatn seciunea gradul unui vrf.2m= d(x1)+ d(x2)+ ... +d(xn) 2m=(n-1)+ (n-1)+... +(n-1)

    2m=n(n-1)/2

    6. Graf bipartit

    Definiie.FFiieeGG==((VV,,MM))unun ggrraaffnneeoorriieennttaatt..GGrraattuullGGsseennuummeetteeggrraaffbbiippaarrttiitt,,ddaacceexxiissttddoouummuulliimmiinneevviiddeeVVlliiVV22ccuupprroopprriieettiillee::

    =

    =

    21

    21

    VV

    VVV

    --oorriicceemmuucchhiieeaalluuiiCCaarreeooeexxttrreemmiittaatteennVV11iippeecceeaallaallttnnVV22.. Exemplu de graf neorientat bipartit:G=(V, M) unde: V={ 1,2,3,4}

    M={[1,3], [2,3], [2,4]}Reprezentarea sa graficeste:

    1

    3

    Demonstraie:Graful de mai sus este bipartit deoarece respectntocmai definiia grafului bipartit, adicexistdou

    mulimi V1={1,2} i V2={3,4} astfel nct:=

    =

    21

    21

    VVVVV

    - orice muchie a lui C are o extremitate n V1 i pe cealaltn V2..Cum, n plus, pentru orice x din V1 i orice y din V2 existn G muchia [x,y], rezult, conform definiiei,ca graful G este bipartit complet.Observaie.A demonstra cun graf au este bipartit complet nseamna demonstra :- ceste bipartit- pentru orice x din Vl i orice y din V2 existin G muchia [x,y].Observaie.ntr-un graf bipartit complet n care V1 are p elemente i V2 are q elemente existpq muchii.

    Demonstraie:

    3

  • 7/25/2019 Teorie Grafuri Neorintate

    5/54

    5

    Fiecare vrf xidin V1 este legat de toate vrfurile aflate n V2, altfel spus, existq muchii care-l admit caextremitate pe xi. Cum n Vl sunt p elemente, adici= 1...p. nseamncelementele mulimii V1 suntlegate prin pq muchii de elementele mulimii V2.Observaie. Graful bipartit complet n care V1 are p elemente i V2 are q elemente se noteazcu Kp,q.n particular, graful:

    se noteazK2,2(este un graf bipartit complet cuV1 = 2 i V2=2 , V1 i V2 din definiie).

    8. Reprezentarea grafurilor neorientate

    Fie G=(V, M) un graf neorientat, unde V={x1, x2,..., xn} i M={m1,m 2,..., mp}. Deoarece ntre mulimea{x1, x2,..., xn} i mulimea {1, 2,..., n} existo bijecie, xii, putem presupune, fra restrngegeneralitatea, mai ales pentru a uura scrierea, ca V={ 1, 2,..., n}.n baza celor spuse mai sus, mai departe, ]n loc de x; vom scrie i i ]n loc de muchia [xi,xj] vom scrie [i,j].Pentru a putea prelucra un graf neorientat cu ajutorul unui program, trebuie mai nti sfie reprezentat inprogramul respectiv.Pentru a reprezenta un graf, ntr-un program, existmai multe modaliti folosind diverse structuri dedate; dintre acesta, in continuare, vom prezenta:- reprezentarea unui graf prin matricea de adiacen;- reprezentarea unui graf prin listele de adiacen;- reprezentarea unui graf prin irul muchiilor.

    Matricea de adiacent

    Fie G=(V, M) un graf neorieritat cu n vrfuri (V={1,2, ..., n}) i m muchii.MMaattrriicceeaaddeeaaddiiaacceenn,,aassoocciiaattggrraaffuulluuiiGG,,eesstteeoommaattrriicceeppttrraattiiccddeeoorrddiinnuullnn,,ccuueelleemmeenntteelleeddeeffiinniitteeaassttffeell::

    [ ]

    [ ]

    =

    Mjidaca

    Mjidacaa ji

    ,,0

    ,,1,

    ((aallttffeellssppuuss,, aaii ,,jj==11,,ddaacceexxiissttmmuucchhiieennttrreeiiiijjiiaaii ,,jj==00ddaaccnnuueexxiissttmmuucchhiieennttrreeiiiijj))Exemplul 1. Fie graful reprezentat grafic ca infigura de mai jos:

    Matricea de adiacen, asociatgrafului, este:

    =

    =

    0011

    0011

    1100

    1100

    44434241

    34333231

    24232221

    14131211

    aaaa

    aaaa

    aaaa

    aaaa

    A

    Exemplul 2. Fie graful reprezentat grafic ca infigura de mai jos:

    Matricea de adiacent, asociatgrafului, este:

    =

    =

    0111

    1011

    1101

    1110

    44434241

    34333231

    24232221

    14131211

    aaaa

    aaaa

    aaaa

    aaaa

    A

    Comentarii:1. Matricea de adiaceneste o matriceptratic, de ordin n, isimetricfade diagonala principal(adica[i][j]=a[j][i]).Secvenele de citire a matricei de adiacen,sunt:int a[100][100];..........coutn;for (i=1;ia[i][j]; i se transferi suba[j][i]=a[i][j];} diagonala principal

    1

    3

  • 7/25/2019 Teorie Grafuri Neorintate

    6/54

    6

    sau:.......cin>>n; cin>>m;for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    7/54

    7

    T2,6=0, pentru cavecinul T1,6(4) al lui 1 este ultimul din list.A treia etap. Se trec in tabel vecinii lui 2, ncepnd de la coloana 7.

    1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 3 4 3 45 7 6 0 8 0

    T2,2=7, pentru cprimul vecin (3) al lui 2 s-a trecut la coloana (T1,7=3).T2,7=8, pentru caurmtorul vecin (4) al lui 2 s-a trecut la coloana 8 (T1,8=4).T2,8=0, pentru cvecinul T1,8(4) al lui 2 este ultimul din list.

    A patra etap. Se trec in tabel vecinii lui 3, ncepnd de la coloana 9.

    1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 3 4 3 4 1 25 7 9 6 0 8 0 10 0

    T2,3=9, pentru cprimul vecin (1) al lui 3 s-a trecut la coloana 9 (T1,9=1).T2,9=10, pentru curmtorul vecin (2) al lui 3 s-a trecut la coloana 10 (T1,10=2)T2,10= 0, pentru cvecinul T1,10(2) al lui 3 este ultimul din list.

    Ultima etap. Se trec in tabel vecinii lui 4, ncepnd de la coloana 11.1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 3 4 3 4 1 2 1 25 7 9 11 6 0 8 0 10 0 12 0

    T2,4=11, pentru cprimul vecin (1) al lui 4 s-a trecut la coloana 11 (T1,11=1).T2,11=12, pentru curmtorul vecin (2) al lui 4 s-a trecut la coloana 12 (T1,12=2)T2,12=0, pentru cvecinul T1,12(2) al lui 4 este ultimul din list.

    22..SSeeffoolloosseetteeunun ttaabblloouuuunniiddiimmeennssiioonnaall,,ccuunnuummeelleeccaapp,,iiunun ttaabblloouubbiiddiimmeennssiioonnaall,,ccuunnuummeelleeLL((ccaarreerreeiinneelliisstteelleeddeevveecciinniippeennttrruuffiieeccaarreennoodd)),,ccaarraacctteerriizzaatteeaassttffeell::TTaabblloouullccaapp::

    --aarreennccoommppoonneennttee;;--ccaappii==cc,,ddaaccpprriimmuullnnooddddiinnlliissttaavveecciinniilloorrlluuiiiieesstteettrreeccuuttiinnttaabblloouullLLllaaccoollooaannaacc,,aaddiiccLL11,,cceesstteepprriimmuullvveecciinnaalllluuiiii,,iiccaappii==00,,ddaaccnnoodduulliieesstteeiizzoollaatt

    TTaabblloouullLL::--aarree22mmccoommppoonneennttee;;

    --ddaacckkeesstteeunun vveecciinnaallnnoodduulluuiiii,,aattuunnccii::LL11,,kk==kkiiLL22,,pp==00,,ddaacckkeesstteeuullttiimmuullvveecciinnddiinnlliisstt,, ssaauuLL11,,pp==kkiiLL22,,pp==pp++llddaacckknnuueesstteeuullttiimmuullvveecciinnddiinnlliisstt((ppeesstteeccoollooaannaallaaccaarreess--aaaajjuunnss

    nnttaabblloouullLL)).. Exemplude completare a tablourilor cap i L, pentru graful de la exemplul 1.Tabloul cap

    1 2 3 41 3 5 7

    Tabloul L1 2 3 4 5 6 7 83 4 3 4 1 2 1 2

    2 0 4 0 6 0 8 033..SSeeffoolloosseetteeunun ttaabblloouubbiiddiimmeennssiioonnaall,,ccuunnuummeelleeLL,,ccaarraacctteerriizzaattaassttffeell::--aarreennlliinniiii;;--ppeelliinniiaaiisseettrreeccvveecciinniinnoodduulluuiiii.. Exemplu de completare a tabloului L, pentru graful:

  • 7/25/2019 Teorie Grafuri Neorintate

    8/54

    8

    Tabloul L

    33 41 2 42 3

    Implementarea n limbajul C++, a ideii prezentate mai sus, se realizeazconform secvenei deprogram prezentatmai jos......................

    int L[20][20];int nr_vec[20];cout

  • 7/25/2019 Teorie Grafuri Neorintate

    9/54

    9

    coutm;for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    10/54

    10

    if (a[i][j]==1){ k =k+1;e[k].x=i;e[k].y=j;}

    m=k;...............................

    9. Parcurgerea grafurilor

    Fie G=(V, M) graf neorientat, unde V={x1, x2,..., xn} i M={m1, m 2,..., mp}.Prin parcurgerea grafuluiG se nelege vizitarea, ntr-un mod sistematic, a tuturor nodurilor, plecnd dela un nod pl (nod de plecare) mergnd pe muchii incidente doucte dou.Un graf poate fi parcurs n urmtoarele doumoduri:-n ltime (BF= Breadth First)-n adncime (DF= Depth First)

    Parcurgerea n lime (BF- breadth first)

    Fie G=(V, M) un graf neorientat cu n vrfuri (V={1,2, ..., n}) i m muchii.AAllggoorriittmmuull--ddeeppaarrccuurrggeerreeaaggrraaffuulluuiinnlliimmee,,ffoolloossiinnddooccooaadd,, eessttee::--iinniiiiaallttooaatteennoodduurriilleesseeccoonnssiiddeerrnneevviizziittaattee;;

    --sseecciitteetteennoodduullddeepplleeccaarreeppll,,ccaarreesseeccoonnssiiddeerraaccuummvviizziittaatt,,iisseettrreecceeiinnccooaaddppee,,pprriimmaappoozziiiiee;;--sseettrreecciinnccooaaddttooaatteennoodduurriilleenneevviizziittaatteeppnniinnpprreezzeennttiissuunnttaaddiiaacceenntteeccuunnoodduullddeepplleeccaarree((ooddaattccuuttrreecceerreeaalloorriinnccooaaddsseemmaarrcchheeaazzccaaffiiiinnddvviizziittaattee));;--sseettrreecceellaauurrmmttoorruulleelleemmeennttddiinnccooaadd,,ccaarreeiiaarroolluullnnoodduulluuiiddeepplleeccaarree,,iisseerreeiiaappaassuullaanntteerriioorr;;.......... ........ ........ ................................ ......--aallggoorriittmmuullsseetteerrmmiinndduuppcceessuunnttppaarrccuurrsseettooaatteeeelleemmeenntteelleeddiinnccooaadd.. Exemplul 1. Fie graful reprezentat grafic ca n figura de mai jos:

    1

    Observaie.n continuare, un nod se considervizitat cnd este ncercuit:i cu p i u notm indicele primului, respectiv ultimului element din coad.Parcurgerea in lime, a grafului de mai sus, presupune parcurgerea etapelor:* La nceput, nici un nod nu este vizitat (graful aratca in figura iniial, adicnici un nod nu este

    ncercuit).* Se pleacde la nodul 1, care se trece in coadpe prima poziie i se marcheazca fiind vizitat.

    p=u1

    *Se viziteazi se trec n coadtoate nodurile adiacente cu nodul 1, nevizitate nc(2,3,4).

  • 7/25/2019 Teorie Grafuri Neorintate

    11/54

    11

    p u1 2 3 4

    * Se trece la urmtorul element din coad; acesta este 2. Se viziteazi se trec n coadtoate nodurileadiacente cu nodul 2, nevizitate nc(nu este nici un nod care sverifice condiiile).

    p u1 2 3 4

    *Se trece la urmtorul element din coad; acesta este 3. Se viziteazi se trec n coadtoate nodurileadiacente cu nodul 3, nevizitate nc(b).

    p u1 2 3 4 6

    * Se trece la urmtorul element din coad; acesta este 4. Se viziteazi se trec n coadtoate nodurileadiacente cu nodul 4, nevizitate nc(5).

    p u1 2 3 4 6 5

    *Se trece la urmtorul element din coad: acesta este 6. Se viziteazi se trec n coadtoate nodurileadiacente cu nodul 6, nevizitale nc(nu este nici un nod care sverifice condiiile).

    p u1 2 3 4 6 5

    *Se trece la urmtorul element din coada; acesta este 5. Se viziteazi se trec n coada toate nodurileadiacente cu nodul 5, nevizitate nc(nu este nici un nod care sverifice condiiile).

    p = u1 2 3 4 6 5

    * Algoritmul se ncheie aici (nu mai sunt noduri).Deci, parcurgerea in lime a grafuluieste: 1 2 3 4 6 5

  • 7/25/2019 Teorie Grafuri Neorintate

    12/54

    12

    n continuare, vom prezenta programele C++ care implementeazalgoritmul prezentat mai sus.Programul 1 (abordare nerecursiv)#include #include #include int a[20][20],coada[20], viz[20];int i, n , el, j, p, u, pl, m, x, y;void main()

    {clrscr();coutn;coutm;for (i=1;i>y;a[x][y]=1; a[y][x]=1;}for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    13/54

    13

    void main(){ clrscr();coutn;coutm;for (i=1;i>y;a[x][y]=1; a[y][x]=1;}

    for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    14/54

    14

    for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    15/54

    15

    lanul L2=[5, 2, 4, 1, 3, 2] este lanneelementar (prin 2 s-a trecut de douori).

    Ciclu

    DDeeffiinniiiiee..FFiieeGG==((VV,,MM))uunnggrraaffnneeoorriieennttaatt..SSeennuummeetteecciicclluu,,nnggrraaffuullGG,,llaannuullCC==[[xxii11,,xxii22,,,,......,,xxiikk]],,ccuupprroopprriieettaatteeaaccxxii11==xxiikkiiaarreemmuucchhiiiilleeddiiffeerriitteeddoouucctteeddoouu.. Exemplu: n grafullanul C=[ 1, 3, 2, 4, 1] este ciclu.

    Definiie.FFiieeGG==((VV,,MM))uunnggrraaffnneeoorriieennttaatt..SSeennuummeetteecciicclluueelleemmeennttaarr,,nnggrraaffuullGG,,uunncciicclluuccuupprroopprriieettaatteeaaccoorriiccaarreeddoouunnoodduurriiaalleessaallee,,ccuueexxcceeppiiaapprriimmuulluuiiiiaauullttiimmuulluuii,,ssuunnttddiissttiinnccttee.. Exemplu: n graful

    ciclul C=[ 1, 3, 2, 4, 1 ] este ciclu elementar.Definiie.FFiieeGG==((VV,,MM))uunnggrraaffnneeoorriieennttaatt..SSeennuummeetteecciicclluunneeeelleemmeennttaarr,,nnggrraaffuullGG,,uunncciicclluuccuupprroopprriieettaatteeaaccnnoodduurriilleessaallee,,ccuueexxcceeppiiaapprriimmuulluuiiiiaauullttiimmuulluuii,,nnuussuunnttddiissttiinnccttee.. Exemplu: n graful

    ciclul C=[5, 3, 4, 1, 2, 4, 5] este ciclu neelementar (prin 4 s-a trecut de douori).Definiie. FFiieeGG==((VV,,MM))uunnggrraaffnneeoorriieennttaatt..DDoouucciicclluurriiCC11iiCC22ssuunntteeggaallee,,ddaaccmmuucchhiiiilleelloorriinndduucc

    aacceellaaiiggrraaffppaarriiaallaallssuubbggrraaffuulluuiiggeenneerraattddeevvrrffuurriilleecceeaappaarriinnlluuiiCC11,,rreessppeeccttiivvlluuiiCC22.. Exemplu: n graful

    ciclul Cl=[1, 3, 2, 4, 1] este egal cu ciclul C2=[ 3, 2, 4, 1, 3].Observaie. Uncicluse numete par, daclungimea saeste un numr pari se numete impar, daclungimea saeste un numr impar.

    Graf conex

    DDeeffiinniiiiee..FFiieeGG==((VV,,MM))uunnggrraaffnneeoorriieennttaatt..GGrraaffuullGGsseennuummeetteeccoonneexxddaaccppeennttrruuoorriiccaarreeddoouuvvrrffuurriixxiiyy,,xxyy,,eexxiissttuunnllaannnnCCddeellaaxxllaayy.. Exemplu de graf conex:

    Graful este conex, deoarece oricare ar fi vrfurile x i y, xy, existun lann G care sle lege.

    5

    5

    5

    1

    2 3

    4

    5

  • 7/25/2019 Teorie Grafuri Neorintate

    16/54

    16

    Exemplude graf care nu este conex:

    Graful nu este conex, deoarece existdouvrfuri, cum ar fi 1 si 4, pentru care nu existnici un lanngraf care sle lege.Componentconex

    DDeeffiinniiiiee..FFiieeGG==((VV,,MM))uunnggrraaffnneeoorriieennttaatt..SSeennuummeetteeccoommppoonneennttccoonneexx,,uunnggrraaffnneeoorriieennttaattGG11==((VV11,,MM11))ccaarreevveerriiffiiccuurrmmttooaarreelleeccoonnddiiiiii::

    --eesstteessuubbggrraaffaallggrraaffuulluuiiGG;;--eesstteeccoonneexx;;--nnuueexxiissttnniicciiuunnllaannnnGGccaarreesslleeggeeuunnnnooddddiinnVV11ccuuuunnnnooddddiinnVV--VV11..

    Exemplu: Fie graful G=(V, M) : V={ 1,2,3,4,5,6},M={[ 1,2], [1,3], [2,3],[4,5], [4,6]}

    Pentru graful de mai sus, graful G1=(V1,M1) unde: V1={4,5,6} i M1={ [4,5], [4,6]} este componentconex, deoarece:- este subgraf al grafului G;- este conex:

    - nu existnici un lann G care i lege un nod din V1, cu un nod din V-V1={1,2 3},La fel se poate spune i despre graful G2=(V2,M2) unde: V2={1,2,3} i M2={[1,2], [1,3], [2,3]}n concluzie, graful, din figura de mai sus, este format din doucomponente conexe.

    Observaie.Fie G=(V, M) un graf neorientat. Graful G este conexdaci numai daceste format dintr-o singurcomponentconex. Exemplude graf conex (este format dintr-o singurcomponentconex):

    Observaie. Fie G=(V, M) un graf neorientat. Pentru a verifica dacgraful este format din una sau maimulte componente conexese procedeazastfel:- se parcurge graful, prin una din metodele de parcurgere;

    - dacdupparcurgere mai existn graf noduri nevizitate, atunci graful este format din mai multecomponente conexe, altfel este format dintr-o singurcomponentconex, adicgraful este conex.#include #include #include int a[20][20];int viz[20];int i, n ,j, pl, m, x, y, ok;void parc_adancime(int pl){int j;viz[pl]=1;for (i=1;j>m;for (i=1;i>y;a[x][y]=1; a[y][x]=1;}

    for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    17/54

    17

    ok=0; //se verifica daca mai suntfor (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    18/54

    18

    Observaie. Pentru a evita parcurgerea unui drum de 2 ori se va recurge la strategia de a atribui lui x,valoarea l, adictoate ciclurile splece de la primul nod: din acest motiv xk{2.... n} pentru k{2,... n}n concluzie, a rezolva problema nseamna determina vectorii:x=(x1,x2,...,xn)unde x1=1 i xk{2.... n} pentru k{2,... nTabla va arta astfel:

    n

    2 3 ...... n-1 n2 3 ...... n-1 n... ... ...... ... ...2 3 ...... n-1 n2 3 ...... n-1 n1

    2 n

    Pentru reprezentarea grafului n program se va folosi matricea de adiacen, definitastfel:ai,j=1, dacexistmuchie ntre nodurile i i j;ai,j=0, dacnu existmuchie ntre nodurile i i j.Exemplu: Pentru graful de mai jos

    matricea de adiacense definete astfel:

    =

    00111

    00111

    11000

    11001

    11010

    A

    Concluzii:1. ntre nodurile k si i, existmuchie dacak,i=1 (i ai,k=1), deci ntre nodurile xki xjexistmuchie dac

    a[xk][xi]=1 (si a[xi][xk]=1).2. Nodul xktrebuie sfie diferit de nodul xi, pentru i=1...k-1.3. Nodul xn trebuie sfie legat prin muchie de nodul x1adica[xn][x1]=1* Comentarii la procedura Valid:Trebuie verificat c:1. existmuchie ntre nodurile xk-1i xk, adictrebuie verificat ca[xk-1][xk]=1;2. nodul xkeste diferit de toate nodurile prin care s-a trecut, adic:xkxipentru i=1...k-1.3. dacs-a ajuns la al n-lea nod din ciclu, trebuie sexiste muchie ntre acesta primul nod, adic: dack=n atunci a[ xk][x1]=1#include #include

    #include typedef int sir[20];sir x;int i, k, n;int as, ev;int a[20][20];void succ(sir x, int k, int &as){if (x[k]

  • 7/25/2019 Teorie Grafuri Neorintate

    19/54

    19

    else as=0;}void valid( sir x, int k, int &ev){ev=l ;if (a[x[k-1]][x[k]]==0) dacnu existdrum ntre xk-1i xk

    ev=0;else

    {for (i=1;i=k-l;i++)if (x[i]==x[k]) ev=0;

    if ((k==n) && (a[x[n]][x[l]]==0)) ev=0;}

    }void afis(sir x, int k){int i;for (i=l;i

  • 7/25/2019 Teorie Grafuri Neorintate

    20/54

    20

    Ciclul C=[ l, 3, 2, 4, l ] este, n graful G, ciclu eulerian.Teorem. Fie G=(V, M) un graf neorientat. Graful G, frvrfuri izolate, este eulerian daci numaidaca este conex i gradele tuturor vrfurilor sale sunt numere pare.Exemplull.Fie graful G=(V, M) unde: V={1,2,3,4}

    M={ [ 1,3], [ 1,4], [2,3], [2,4]}Reprezentarea sa graficeste:

    este graf eulerian, deoarece verificcondiiile teoremei anterioare, adic:- nu are vrfuri izolate;- este conex;- gradele tuturor vrfurilor sunt numere pare.DDeeffiinniiiiee..UnUn ggrraaffccaarreeccoonniinneecceellppuuiinnuunncciicclluueeuulleerriiaannsseennuummeetteeggrraaffeeuulleerriiaann..

    Algoritmul de determinare a unui ciclu eulerian ntr-un graf neorientat.

    Pas 1. Se deteminciclul C=(c1,c2,..., ck, c1), unde c1=1.

    Pas 2. Se caut, printre nodurile ciclului determinat la pasul anterior, un nod pentru care mai existmuchii incidente cu el neluate nc. Fie acesta cjconstruim ciclul Cn= (cn1,cn2,..., cnk, cn1), unde cni=cjcn- ciclu nou

    Pas 3.Ciclul determinat la pasnl 2 se "concateneaz" la ciclul C, obinndu-se astfel ciclul C=(c1,c2,..., cj,cj+1...,cj+kn-1,..., ck+kn, c1), figurat mai jos:

    Pas4. Dacnu sau ales toate muchiile, se reia pasul 2. Exerciiu: Pentru graful din figura de mai jos, sse determine un ciclu eulerian.

    Rezolvare:Pas1. Se determinun ciclu plecnd de la nodul 1; fe acesta: C-('l, 3, 4, 2, 1) (privii figura).

    2 3

    2 3

    c2c1

    ck

    1

  • 7/25/2019 Teorie Grafuri Neorintate

    21/54

    21

    Pas2. Se caut, printre nodurile ciclului determinat la pasul anterior, un nod pentru care mai existmuchiiincidente cu el neluate nc; fie acesta nodul 4 -1. Construim ciclul Cn, plecnd de la acest nod: Cn= (4, 5,6,7,8,4 )

    Pas3. Ciclul determinat la pasul 2 se "concateneazla ciclul C, obinndu-se astfel ciclul: C=(1, 3, 4, 5, 6,7,8, 4, 2, 1 )

    Pas4. Deoarece mai sunt muchii neluate nc, se reia pasul 2.Pas2. Se caut, printre nodurile ciclului determinat pnn prezent, un nod pentru care mai existmuchiiincidente cu el neluate nc; acesta este nodul 4. Construim ciclul Cn, plecnd de la acest nod: Cn=(4, 9,10,4).

    Pas 3. Ciclul determinat la pasul 2 se "concateneaz la ciclul C, obinndu-se astfel ciclul: C=(1, 3, 4, 9,10, 4, 5, 6, 7, 8, 4, 2, 1).

    programul de determinare a unui ciclu eulerian ntr-un graf neorientat.#include #include#includetypedef int mut[20][20];typedef int sir[20];int a[20][20];sir viz, c, cn, gr;int i, k, j, n, kn, poz, m, eulerian, x, y;int grad(int i){ int s, j;

    s=0;for (j=1;j

  • 7/25/2019 Teorie Grafuri Neorintate

    22/54

    22

    ok=1;for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    23/54

    23

    a[cn[kn]][cn[kn-1]]=0;break;}

    }while (cn[kn]!=cn[1]);for (j=k;j>=poz;j--) c[j+kn-1]=c[j] ;for (j=1 ;j

  • 7/25/2019 Teorie Grafuri Neorintate

    24/54

    24

    2. Sse determine toate subgrafurile grafului de mai jos:

    3. Fie G un graf neorientat, cu n vrfuri i m muchii. Sse determine numrul subgrafurilor grafului G.4.Se citesc din 2 fiiere informaiile despre 2 grafuri neorintate: de pe prima linie numrul de noduri n iapoi, de pe urmtoarele rnduri, matricea de adiacena grafului. n fisierul al doilea pe ultimul rnd dupmatricea de adiacen, este memorat un ir ce reprezintetichetele nodurilor. Sse verifice dacgraful 2este subgraf al grafului 1.4. Gradul unui vrfl. Fiind dat graful de mai jos, sse determine pentru fiecare vrf n parte gradul su; sse precizezevrfurile terminale i vrfurile izolate.

    2. Sse demonstreze corice graf G, cu n 2 noduri, conine cel puin douvrfuri care au acelai grad.3. Sse verifice dacexistgrafuri cu 5 noduri pentru care:a) irul gradelor vrfurilor sale este: 1,2,3,0,5b)irul gradelor vrfurilor sale est3: 1,2,3,4,14.Fie graful G, cu n vrfuri i m muchii, astfel nct sfie ndeplinitrelaia:

    ( )( )2

    21 >

    nnm

    Sse demonstreze cG nu are vrfuri izolate.5. Fie G un graf neorientat, cu n vrfuri i m muchii, reprezentat prin matricea de adiacen. Sse

    realizeze programe, n C/C++, care:a) afieazgradele tuturor vrfurilor;b) afieazvrfurile de grad par;c) afieazvrfurile izolate;d) afieazvrfurile terminale;e) verificdacgraful are vrfuri izolate;t) verificdacgraful are vrfuri terminale;g) verificdacgraful are vrfuri interioare (nu sunt nici izolate nici terminale);h) verificdacgraful are toate vrfurile izolate;i) verificdacgraful are toate vrfurile interioare (nu sunt nici izolate nici terminale):

    j) afieazgradul unui vrf dat:k) afieazvecinii unui nod dat, vf;

    l) verificdacun vrf dat este terminal, izolat sau interior;m) afieazgradul cel mai mare i toate vrfurile care au acest gradn) afieazfrecventa vrfurilor:

    izolate : n 1terminale : n2interioare : n3

    o) fiind dat irul g1, ...,gn, sse verifice dacpoate reprezenta irul gradelor vrfurilor n aceastordine;p) fiind dat irul g1...,gn, sse verifice dacpoate reprezenta irul gradelor vrfurilor (nu neaprat naceastordine).

    5

    1

    5

    1

    6

  • 7/25/2019 Teorie Grafuri Neorintate

    25/54

    25

    5. Graf complet1. Fiind date grafurile de mai jos, sse precizeze care dintre ele este complet i sse justifice rspunsul.a

    1b

    2. Pentru grafurile K3i K5:a) sse precizeze gradul fiecrui vrf;b) sse precizeze numrul de muchii;c) sse realizeze o reprezentare grafic.3. Fie graful G, cu n vrfuri, dat prin matricea de adiacen. Sse realizeze un subprogram careprecizeazdacgraful este complet, astfel:a) fcnd o analizasupra nodurilor;b) fcnd o analizasupra muchiilor.4. Fie graful G, cu n vrfuri, dat prin matricea de adiacen. Sse realizeze subprograme care precizeaz:a) cte muchii mai trebuie adugate pentru a deveni complet;

    b) ntre ce noduri mai trebuie adugate muchii astfel nct graful sdevincomplet.6. Graf bipartitl. Fiind date grafurile de mai jos, sse precizeze care dintre ele este bipartit i sse justifice rspunsul.a) b)

    2. Ce muchie trebuie eliminatdin graful prezentat mai jos astfel nct sdevinbipartit?

    3. Fie graful bipartit G, frvrfuri izolate, dat prin matricea de adiacen. Sse realizeze un programcare determinmulimile V 1 i V2 despre care se vorbete n definiie.4. Fie graful G cu n vrfuri, dat prin matricea de adiacen. Sse realizeze un program care precizeazdacgraful este bipartit.5. Sa se genereze toate grafurile neorientate bipartite complete cu n noduri.7. Graf bipartit complet

    1. Fiind date grafurile de mai jos sse precizeze care dintre ele este bipartit complet i sse justificerspunsul.a) b)

    2. Ce muchie trebuie adugatn graful prezentat mai jos astfel nct sdevinbipartit complet:

    35

    35

    3

    1

    5

    35

    3

  • 7/25/2019 Teorie Grafuri Neorintate

    26/54

    26

    3. Fie graful G, cu n vrfuri reprezentate {1... n}. Presupunnd cgraful este bipartit complet, astfel

    nct { }pVsinpcupV ,...,1, 11 =

  • 7/25/2019 Teorie Grafuri Neorintate

    27/54

    27

    sse precizeze, pentru fiecare n parte, lista nodurilor obinutn urma parcurgerii:- n lime;- n adncime.2. Fie G un graf, cu n noduri i m muchii. Precizndu-se un nod, de exemplu nodul l, sa se realizeze unprogram care afieaztoate nodurile accesibile din acest nod.

    10. Conexitate1.Fiind date grafurile de mai jos:

    a) l b)

    sa se precizeze pentru fiecare n parte un lan, un lande lungime 4, un lanelementar, un ciclu, un cicluelementar, doucicluri egale.2. Fie G un graf neorientat, cu n noduri i m muchii. Precizndu-se doua noduri np( nodul de plecare) ins (nodul de sosire), sse determine toate lanurile elementare care le admit ca extremiti.3. Fiind dat un graf neorientat, cu n noduri i m muchii sse determine toate lanurile elementare care au

    cea mai mare lungime.4. Sse realizeze un program care, fiind dat un graf neorientat, verificdacconine un ciclu de lungime5. Sse realizeze un program care, fiind dat un graf neorientat, afieaztoate ciclurile elementare delungime p, plecnd de la nodul 1 .6. Sse realizeze un program care, fiind dat un graf neorientat , determincte componente conexe are.7. Sse realizeze un program care, fiind dat un graf neorientat , determintoate componentele conexe alesale.8. Sse realizeze un program care, fiind dat un graf neorientat, determintoate perechile de vrfuri ntrecare existcel puin un lan.9. Speologii au cercetat n culoare subterane, pentru a stabili dacaparin aceleiai peteri. Prin tehnicispecifice de cureni de aer i de colorare a cursurilor de ap, a fost demonstratexistenta unor canale delegturntre mai multe culoare. Precizndu-se perechile de culoare ntre care au fost stabilite legturi, sse afle dacsistemul de culoare aparine unei singure peteri.10. ntr-un grup de n persoane, se precizeazperechi de persoane care se considerprietene. Folosindprincipiul c"prietenul prietenului meu mi-este prieten", sse determine grupurile cu un numr maxim depersoane ntre care se pot stabili relaii de prietenie, directe sau indirecte.

    11. Cicluri Hamiltonienel. Pentru graful de mai jos; sse dea exemplu de un lansi de un ciclu hamiltonian.

    l

    2. Sse realizeze un program care pentru un graf dat verificdacsatisface condiiile teoremei prezentatein seciunea 11.

    3. Sse arate cnumrul ciclurilor hamiltoniene ale grafului Kncu n3, este( )

    2

    !1n

    4. Sse arate cnumrul ciclurilor elementare ale grafului Kncu n3, este ( ) ( )=

    +n

    k k

    knnn

    3

    1...1

    2

    1

    5. Sse realizeze un program care pentru un graf dat verificdaceste hamiltonian.

  • 7/25/2019 Teorie Grafuri Neorintate

    28/54

    28

    6. La curtea regelui Artur s-au adunat 2n cavaleri si fiecare dintre ei are printre cei prezeni cel mult n-1dumani. Artai cMerlin, consilierul lui Artur, poate s-i aeze pe cavaleri, la o masrotund, n aa fel

    nct nici unul dintre ei snu stea alturi de vreun duman de-al su.7. Se considern persoane. Fiecare are printre cei prezeni cel mult n/2 dumani. Sse determine toateposibilitile de aezare a acestora la o masrotundastfel nct nici unul dintre ei snu stea lngunduman al su.8. La un cenaclu literar sunt invitai un numr de n elevi, identificaii cu l...n, de la L licee, identificate1...L. Sse determine toate modalitile de aezare a acestora la o masrotundastfel nct snu fie doielevi de la acelai liceu vecini.

    1. Noiunea de graf neorientatProblema 1Rspunsul este afirmativ (Da). Definim graful neorientat asociat reelei astfel:- mulimea nodurilor este mulimea interseciilor dintre strzi i a capetelor de strzi (la ieirea din ora);este mulime finiti nevid- mulimea muchiilor este mulimea bucilor de straddintre douintersecii sau dintre o intersecie i uncapt de strad(ia ieirea din ora).Problema 2Rspunsul este afirmativ (Da). Definim graful neorientat asociat astfel:- mulimea nodurilor este mulimea persoanelor (este mulime finiti nevid);- muchia dintre nodurile x i y se definete ca fiind reprezentarea ideii "persoanele x i y se cunosc" (pot

    exista nenumrate definiii; dai i altele).Problema 3Rspunsul este afirmativ (Da). Definim graful neorientat asociat astfel:- mulimea nodurilor este mulimea rilor (este mulime finiti nevid):- muchia dintre nodurile x i y se definete ca fiind reprezentarea ideii "din ara x se poate ajunge n aray, cu avionul" (pot exista nenumrate definiii).Problema 4Dacadmitem c existo infinitate de stele: Rspunsul este negativ (Nu), deoarece mulimea nodurilortrebuie sfie, conform definiiei, finit(i nevid).Dacadmitem ca stelele sunt ntr-un numr finit: Rspunsul este pozitiv (Da) i putem defini grafulneorientat asociat lor astfel:- mulimea nodurilor este mulimea stelelor (este mulime finiti nevid);

    - muchia ntre nodurile x i y se definete ca fiind reprezentarea ideii "de pe steaua x se poate vedeasteaua y" (pot exista nenumrate definiii).Problema 5a) V={ l, 2, 3,4 ,5};b) M={[1,2], [1,4], [1,5], [2,4], [3,5]};c) Nodul 1 este adiacent cu nodul4; nodul 3 este adiacent cu nodul 5; ...d) [1,2] : 1 i 2; [1,4] : 1 i 4; [1,5] : 1 i 5; [2,4] : 2 i 4; [3,5] : 3 si 5; e) [1,2] i [1,4]; [2,4] i [l,4]; ...

    2. Noiunea de graf parial

    Problema 1Cele dougrafuri pariale vor fi reprezentate prin desen n figurile de mai jos: Primul graf parial (seeliminmuchiile [1,5], [2,4])

    V1={ l, 2, 3, 4. 5}M1={ [ 1,5], [1,4] ,[3,5]}

    Al doilea graf parial (se eliminmuchiile [1,2], [1,4], [3,5];)V1={ l, 2, 3, 4. 5}M1={ [ 1,5], [2,4] }

    Problema 2Grafurile pariale, care se obin plecnd de la graful din enun, sunt n numr de:

    1

    24

    3 5

    1

    23

    4

    5

  • 7/25/2019 Teorie Grafuri Neorintate

    29/54

    29

    1 dacse elimin0 muchii 03C

    3 dacse elimino muchiile 13C

    3 dacse elimindoumuchii 23C

    1 dacse elimintoate muchiile 33C

    deci, n total, 1+3+3+1=8 grafuri pariale.

    Problema 3Avnd in vedere c: "un graf parial al grafului numr oarecare de muchii", putem scrie:Numrul total al grafurilor pariale ale grafului G, este suma dintre numrul grafurilor pariale care seobin:prin eliminarea unui numr de 0 muchii: 0mC

    prin eliminarea unui numr de 1 muchii: 1mC

    prin eliminarea unui numr de 2 muchii: 2mC

    .........................................................prin eliminarea unui numr de m-1 muchii: 1mmC

    prin eliminarea unui numr de m muchii: mmC

    prin adunare se obine: 0mC +1mC +

    2mC +...+

    1mmC +

    mmC =2

    m

    Observaie. Suma de mai sus se calculeazastfel:n relaia 0mC +1mC x

    1+ 2mC x2+...+ 1mmC x

    m-1+ mmC xm=(1+x)m se nlocuiete x cu valoarea 1.

    Problema 4Se citesc din 2 fiiere text informaii despre 2 grafuri neorinetate: pe prima linie numrul de noduri i depe urmtoarele rnduri, matricea de adiacen. Sse verifice daca graful reinut n cel de-al doilea fiiereste graf parial al grafului reinut n primul fiier.

    Rezolvare:Se verificdaccele 2 grafuri au acelai numr de noduri i dacgraful G2 nu conine muchii care nuexistn graful G1. Matricile de adicenale celor 2 grafuri au dimensiunea n, respectiv m. Funciagrafp() verificdacG2 este graf parial al grafului G1.#include #include #include int a1[20][20],a2[20][20],i,j,n,m;ifstream f1("gp1.txt");ifstream f2("gp2.txt");int grafp(){if(m!=n) return 0;

    else for(i=1;in;for (i=1;ia1[i][j]; f1.close();f2>>m;for (i=1;ia2[i][j]; f2.close();if(grafp()) cout

  • 7/25/2019 Teorie Grafuri Neorintate

    30/54

    30

    1 0 0 0

    gp2.txt0 1 0 1

    1 0 0 00 0 0 01 0 0 0

    Problema 5.Se citesc dintr-un fiier informaiile despre graful neorintat: de pe prima linie numrul de noduri n ieticheta unui nod x, i apoi, de pe urmtoarele rnduri, matrice de adiacena grafului. Sse afieze ntr-

    un alt fiier text informaiile despre graful paial obinut prin eliminarea tuturor muchiilor care auextremiti un nod cu gradul par i nodul x.

    Rezolvare:n vectorul v se rein nodurile de grad par.#include #include #include int a[20][20],v[20],i,j,n,m,x;ifstream f1("gp3.txt");ofstream f2("gp4.txt");

    int grad(int i){int j,g=0;for(j=1;j

  • 7/25/2019 Teorie Grafuri Neorintate

    31/54

    31

    1

    Problema 2Subgrafurile care se obin plecnd de la graful din enunsunt n numr de:1 dacse elimin0 noduri 03C

    3 dacse elimin1 nod 13C

    3 dacse elimindounoduri 23C

    deci, n total 1+3+3=7 subgrafuri.Atenie! Toate nodurile nu se pot elimina pentru cs-ar obine un graf cu mulimea vrfurilor vid(acestlucru nu este permis de definiie).

    Problema 3Avnd n vedere c: un subgraf al grafului G se obine prin eliminarea unui numr oarecare de noduri(diferit de numrul total de noduri ale grafului), putem scrie:Numrul total al subgrafurilor grafului G este suma dintre numrul subgrafurilor care se obin:prin eliminarea unui numr de 0 noduri: 0nC

    prin eliminarea unui numr de 1 noduri: 1nC

    prin eliminarea unui numr de 2 noduri: 2nC

    ........................................................prin eliminarea unui numr de n-1 noduri: 1nnC

    prin adunare se obine: 0nC +1nC +

    2nC +...+

    1nnC +=2

    n-1

    Problema 4Se citesc din 2 fiiere informaiile despre 2 grafuri neorintate: de pe prima linie numrul de noduri n iapoi, de pe urmtoarele rnduri, matrice de adiacena grafului. In fisierul al doilea pe ultimul rnd dupmatricea de adiacen, este memorat un sir ce reprezintetichetele acestor noduri.Sse verifice dacgraful 2 este subgraf al grafului 1.

    #include#include#includeint n,m,i,j, a1[10][10],a2[10][10],v[10];ifstream f1("sg1.txt");ifstream f2("sg2.txt");int subgraf(){if(m>n) return 0;else{for (i=1;in) return 0;for (i=1;in;for (i=1;ia1[i][j];f1.close();f2>>m;for (i=1;ia2[i][j];

    for (i=1;i>v[i];f2.close();if(subgraf()) cout

  • 7/25/2019 Teorie Grafuri Neorintate

    32/54

    32

    1 1 0 11 0 1 0

    sg2.txt3

    0 1 11 0 11 1 01 2 3

    4. Gradul unui vrfProblema 1d(1)=3; d(3)=1; d(5)=2; 3 este vrf terminal;

    d(2)=2; d(4)=2; d(6)=0; 6 este vrf izolat;Problema 2Fie V={x1, x2, .... xn}. Presupunem c graful nu conine douvrfuri care saibacelai grad, decid(xi)#d(xj) pentru i#j i d(xi){0,1,...,n-1} pentru i=1...n. n concluzie, irul gradelor vrfurilor coincidecu {0,1,...,n-1} fcnd eventual abstracie de ordine (presupunem de exemplu : d(x1)=0, d(x2)=1, ...,d(xn)=n-1). Deci, aa cum se vede i n exemplul prezentat ntre paranteze, existun vrf care are gradul0, adicnu este legat de nici un vrf, i un vrf care are gradul n- 1, adiceste legat de toate celelalte, decii de cel de gradul 0. Contradicie, deoarece cel de gradul 0 nu este legat de nici un vrf.n concluzie, presupunerea fcutla nceputul rezolvri este fals.Problema 3a) Categoric nu, deoarece dacar exista un astfel de graf ar conine un vrf care ar avea gradul 5 (adicarfi legat de nc5 vrfuri). Acest lucru nu se poate ntmpla deoarece frel n graf mai sunt dect 4

    vrfuri.b) Dacun astfel de graf ar exista, l-am putea reprezenta astfel:

    3Nodul 3 a fost legat de nodul 5 (dar putea fi legat i de nodul 1); acest lucru nu este posibil deoarece astfelacesta ar cpta gradul 2 i el practic l are l.Problema 4

    Presupunem cgraful are un vrf izolat i toate celelalte noduri genereazun subgraf complet (oricaredoudintre ele sunt legate printr-o muchie), adicgraful ar avea

    ( )( )2

    21 nnmuchii, oricum nu mai

    multe dect( )( )

    2

    21 nnaa cum se spune n enun. Cum situaia aleaseste cea mai convenabiln acest

    sens, nseamncun astfel de graf nu poate exista.Problema 5Observaie. A determina gradul vrfului i, nseamna determina numrul elementelor care au valoarea 1i se gsesc pe linia i n matricea de adiacen.Mai jos, este prezentatmuchia care returneazgradul vrfului i (Funcia constn calcularea sumeielementelor de pe linia i din matricea de adiacen).

    Funcia care returneazgradul nodului iint grad( int i){int s, j;s=0;for (j=1;j

  • 7/25/2019 Teorie Grafuri Neorintate

    33/54

    33

    #includetypedef int mat[20][20];

    mat a;int i, j, n;int grad( int i){int s, j;s=0;for (j=1;j

  • 7/25/2019 Teorie Grafuri Neorintate

    34/54

    34

    Problema iok=1;for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    35/54

    35

    ok=1;for (i=1;ix[i+l]){aux= x[i];x[i]=x[i+1];x[i+1] =aux;ok=0; }

    }while (ok==0);}

    - se verificdacsunt identice:for (i=1;i>g[i];for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    36/54

    36

    {cout

  • 7/25/2019 Teorie Grafuri Neorintate

    37/54

    37

    {cout

  • 7/25/2019 Teorie Grafuri Neorintate

    38/54

    38

    void generare (int n){int a[10]={0},i,j,k=0,posibil=1;while(posibil)

    {j=n;while(j>0&&a[j]==1) {a[j]=0;j--;}if(j==0) posibil=0;

    else{a[j]=1; k++;if(k

  • 7/25/2019 Teorie Grafuri Neorintate

    39/54

    39

    for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    40/54

    40

    - matricea este simetricfade diagonala principal.................ok1=1;for (i=l;i

  • 7/25/2019 Teorie Grafuri Neorintate

    41/54

    41

    {as=1;x[k]=x[k]+l;}

    else as=0;}void valid( int &ev){ev=1;}void afis(sir x){int i, j, ks; generarea matricei de adiacen,ks=1; plecnd de la vectorul generatfor (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    42/54

    42

    Pentru a rezolva aceastproblemvom folosi metoda Backtracking, astfel:Se genereaztoi vectorii:x=(x1x2,...,xn) cu x1=1 i xk{0,1} pentru k{2,...,n}, frca toate elementele sfie egale cu 1, cuurmtoarea semnificaie:

    dacxi=1, atunci i face parte din V1 naltfel i face parte din V2

    #include #include k#include

    typedef int sir[ 100];sir x; 2int i, k, n; int as, ev; 0 xk 1void succ(sir x, int k, int&as){if (x[k]

  • 7/25/2019 Teorie Grafuri Neorintate

    43/54

    43

    Dupcum se vede n enunul problemei, graful se dprin precizarea numrului de noduri i a iruluimuchiilor sale m1... mp. Plecnd de la faptul cun graf parial al su se obine prin eliminarea unui numroarecare de muchii, pstrnd aceeai muchie de vrfuri, problema datse reduce la generareasubmulimilor mulimii {m1... mp}. Acest lucru l vom realiza folosind metoda Backtracking, astfel:- se genereazsubmulimile mulimii {m1... mp}- pentru fiecare astfel de submulime generat, construim matricea de adiacensi o afim.Se genereaztoi vectorii:x=(x1,x2,...,xp) cu xk{ 0,1} pentru k{1,...,p} cu urmtoarea semnificaie: dacxi=0, atunci miseelimindin mulimea {m1... mp} altfel minu se elimindin mulimea {m1... mp}

    #include #include #include ptypedef int sir[100];typedef struct{

    int x, y; } muchie; ksir x;int a[100][100];int i, k, n, p, nr, j; 1int as, ev; 0 xk 1muchie m[100];void succ(sir x, int k, int &as)

    {if (x[k]

  • 7/25/2019 Teorie Grafuri Neorintate

    44/54

    44

    x[k]=-1;}else k=k-1;

    }getch();}

    Problema 9innd cont de faptul ca un subgraf al unui graf se obine prin eliminarea unui numr de noduri, i amuchiilor incidente cu aceste noduri, tragem urmtoarea concluzie:Problema se reduce la a genera toate submulimile mulimii {l, ..., n} (frmulimea vid), iar pentru

    fiecare submulime generatse afieazdect acele muchii ale grafului care au ambele extremiti printreelementele submulimii.Rezolvarea problemei se face folosind metoda Backtracking, i constn a genera elementele mulimii:{(x1,x2...,xn) I xk{0,1}, k=1,...,n, nu toate nule}.(dacxk=1, nseamncnodul k face parte din submulime, altfel nu)x=(x1,x2,...,xn) unde x{0,1};k{ 1,...,n);#include n#include #include typedef int sir [ 100]; k

    typedef int mat[20[20];

    int e l, e2; 1int i,j,n,m,ns,k; mat a; 0 1sir x; xkint as, ev;void succ(sir x, int k, int &as){if (x[k)< 1)

    {as= 1;x[k]=x[k]+1;}

    else as=0;}void afis(sir x, int k){ int i;ns=ns+1; ns este numrul soluiei

    cout

  • 7/25/2019 Teorie Grafuri Neorintate

    45/54

    45

    { clrscr();coutn;cout

  • 7/25/2019 Teorie Grafuri Neorintate

    46/54

    46

    cout

  • 7/25/2019 Teorie Grafuri Neorintate

    47/54

    47

    a) l b)

    sa se precizeze pentru fiecare n parte un lan, un lande lungime 4, un lanelementar, unciclu, un

    ciclu elementar, doucicluri egale.

    a) L1=[1, 3, 5 ] lan;L2=[1, 3, 5, 4, 2] lande lungime 4;Oricare dintre lanurile de mai sus suntelementare.C1=[1, 3, 5, 1] ciclu;Ciclul de mai sus este elementar.C1=[l, 3, 5, 1] este egal cu C2=[3, 5, 1, 3];

    b)L1=[l, 2, 3, l, 4] lan;L2=[4, 1, 2, 3, S] lande lungime 4;Lanul de mai sus este elementar.Cl=[1, 2, 3, 1] ciclu;Ciclul de mai sus este elementar.C1=[l, 2, 3, 4, 1] este egal cu C2=[4, 3, 2, l, 4];

    Problema 2Fie G un graf neorientat, cu n noduri i m muchii. Precizndu-se doua noduri np (nodul de

    plecare) i ns (nodul de sosire), sse determine toate lanurile elementare care le admit ca

    extremiti.Problema se rezolvfolosind metoda Backtracking, i se reduce la a determina irurile de forma x1..... xpunde xl=np i xp=ns (deci, construcia unei solui se oprete atunci cnd o componenta sa primetevaloarea ns), cu componente distincte, astfel nct ntre xii xi+1sexiste muchie n graful dat.n concluzie, soluia este x=(x1x2,...,xp), unde x1=np, xp=ns, xk{1,...,n} k{2....,p-1}; xixjpentru ij,i a[ xi-1][xi]=1Comentarii la functia Valid:Trebuie verificat ca:- existmuchie ntre nodurile xk-1i xk, adictrebuie verificat ca[ xk-1][xk]=1;- nodul xkeste diferit de toate nodurile prin care s-a trecut, adic:

    xkxipentru i=1...k-1.

    #include #include #include typedef int sir [ 100];typedef int mat[20][20];int e l, e2;int i,j,n,m,ns,np,k;mat a;sir x;int as, ev;

    void succ(sir x, int k, int &as){if(x[k]

  • 7/25/2019 Teorie Grafuri Neorintate

    48/54

    48

    { int i;ev=1;if (a[x[k-1]][x[k]]==0) ev=0; trebuie sexiste muchie ntre

    else xk-1si xkfor (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    49/54

    49

    }void valid(sir x, int k, int &ev){int i; ev=1;if (a[x[k-1]][x[k]]==0) ev=0;

    elsefor (i=1;i>m;for (i=1;i>e2;a[e1][e2]=1;a[e2][el]=1;}

    ns=0;for (n1=n;n1>=2;n1--)

    {x[1]=0;k=1;while (k>0){

    do{succ(x,k,as);if (as) valid(x,k,ev);}while (as && !ev);

    if (as)if (k= nl) afis(x,k);

    else{k=k+ 1;x[k]=0;}

    else k=k-1;}

    }getche();}

    Problema 4Dacar exista un ciclu de lungime 4 ar fi de forma: i, kl, j, k2, i. Pentru a demonstra existena unui astfel

    de ciclu, procedm astfel:- ncercm sartm c pentru o pereche de noduri (i, j) existalte dounoduri kl i k2 diferite de acesteai legate de ele prin muchii (a[i,kl]=1, a[j,kl]=1 i a[i,k2]=1, a[j,k2]=1)....................ok=0;

    for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    50/54

    50

    cout>m:

    for(i=1;i>e2;a[el][e2]=1;

    a[e2][e1]==1;}cout< >p;x[1]=1;k=2;x[k]=1;while (k>1) {

    do{succ(x,k,as );if (as) valid(x,k,ev);

    }while (as && !ev);if (as)if (k==p) afis(x,k);

    else{k=k+ l ;x[k]=l;}

    else k=k-1;}

    getche();}

    Problema 6Pnla urm, este o problemde parcurgere a unui graf i se rezolzastfel:- se citete matricea de adiacen;- toate nodurile se consideriniial nevizitate;- la nceput, sunt 0 componente conexe;- se parcurg nodurile grafului

    - dacse gsete un nod nevizitat nc- nseamnca s-a mai gsit o componentconex- i se viziteaztoate nodurile la care se poate ajunge plecnd fie la acest nod (pentruaceasta este nevoie de una dintre procedurile de parcurgere a unui graf (n adncime sau nlime))

    #include #include #include int viz[ 100],a[20][20], i,n,m,x,y,nr,j;void parc_adancime(int pl){int j;viz[pl]=1;for (j=1;jy;a[x][y]=1;a[y] [x]=1;}for (i=1;i

  • 7/25/2019 Teorie Grafuri Neorintate

    51/54

    51

    (acest lucru se realizeazprintr-un apel ai procedurii parc_adancime).#include #include #include int viz [ 100],a[20][20],i,n,m,x,y,nr;void parc_adancime(int pl ){int j;viz[pl]=1; cout

  • 7/25/2019 Teorie Grafuri Neorintate

    52/54

    52

    cout

  • 7/25/2019 Teorie Grafuri Neorintate

    53/54

    53

    s=s+a [i][j];return s;}.........................ok 1=( n>=3 );ok2=1;for (i=1;i=n/2)) ok2=0;ok==ok 1 && ok2;if (ok) cout

  • 7/25/2019 Teorie Grafuri Neorintate

    54/54

    Se folosete o variabilbooleanok, care la nceputul programului are valoarea false (se presupune ca nuexistcicluri), iar n procedura de afiare sprimeascvaloarea true (adics-a gsit un ciclu hamiltonian;eventual, la primul apel al procedurii Afis sse renune la generarea ciclurilor care ar mai putea fi gsite)i sse afieze nainte de terminarea programului.Altfel:Se procedeazla fel ca la problema 2 (adic, se verificdacsunt satisfcute condiiile teoremeiprezentatn seciunea 11)Problema 6Asociem grupului de persoane, despre care se vorbete n enunul problemei, graf neorientat definit astfel:

    nodurile grafului reprezintpersoanele iar muchia ntre nodurile i i j reprezintprecizarea ideii cpersoanele i i j sunt prietene, adicn relaie de nedumnie. Din ipoteza c fiecare cavaler are cel mult(n-1) dumani, rezultcpentru fiecare cavaler existcel puin 2n-(n-1)=(n+1)2n/2 cavaleri cu careacesta se afln relaie de nedumnie, adicde prietenie. innd cont de cele spuse mai sus, putem trageconcluzia cn graful asociat grupului de persoane sunt veriticate condiiile teoremei prezentatnseciunea 11. conform creia n graful respectiv existcel puin un ciclu hamiltonian. Cicluluihamiltonian i asociem o aezare a cavalerilor la masa rotundn condiiile cerute.