+ All Categories
Home > Documents > Grafuri+Orientate

Grafuri+Orientate

Date post: 07-Apr-2018
Category:
Upload: liana-popovici
View: 218 times
Download: 0 times
Share this document with a friend

of 30

Transcript
  • 8/4/2019 Grafuri+Orientate

    1/30

    1

    GRAFURI ORIENTATE

    ASPECTE TEORETICE

    1. Noiunea de graf orientat

    Definiie. Se numetegraf orientat o pereche ordonatde mulimi notatG=(V, U), unde:V : este o mulime, finiti nevid, ale crei elemente se numesc noduri sau vrfuri;

    U : este o mulime, de perechi ordonate de elemente distincte din V, ale crei elemente se numesc arce.Exemplu de graf orientat:G=(V, U) unde: V={ 1,2,3,4}

    U={{1,2}, {2,3},{1,4}}Demonstraie:

    Perechea G este graf orientat deoarece respect ntocmai definiia prezentat mai sus, adic:V : este finiti nevid:U : este o mulime de perechi ordonate de elemente din V.

    n continuare, vom nota submulimea {x,y}, care reprezintun arc, cu ( x,y) (ntr-un graf orientat arcul (x,y)este diferit de arcul ( y,x)). n baza celor spuse anterior, graful prezentat n exemplul de mai sus se reprezinttextual astfel:

    G=(V, U) unde: V={ 1,2,3,4}U={(1,2), (2,3), (1,4) }

    n teoria grafurilor orientate se ntlnesc frecvent noiunile:- extremitile unui arc fiind dat arcul u=(x,y), se numesc extremiti ale sale nodurile x i y;

    x se numete extremitate iniial;y se numete extremitate final.

    - vrfuri adiacente dac ntr-un graf exist arcul u=(x,y) (sau u=(y,x), sau amndou), se spune despre nodurile x i y c suntadiacente;- inciden

    dac ul i u2 sunt dou arce ale aceluiai graf, se numesc incidente dac au o extremitate comun.

    Exemplu. u1=(x,y) i u2=(y,z) sunt incidente; dac u1=(x,y) este un arc ntr-un graf, se spune despre el i nodul x, sau nodul y, c sunt incidente.

    Reprezentarea unui graf orientat admite dou forme, i anume:- reprezentare textual: aa cum s-a reprezentat graful din exemplul anterior;- reprezentare grafic : arcele sunt reprezentate prin sgei orientate, iar nodurile prin puncte.Exemplu de graf orientat reprezentat textual:G=(V, U) unde: V={ 1,2,3,4}

    U={(1,2), (2,3), (1,4), (4,1)}Exemplu de graf orientat reprezentat grafic (este graful de la exemplul anterior):

    1

    Alte definiii

    Definiie.Se numetegraf orientat o pereche ordonatde mulimi notatG=(V, U), unde:V : este o mulime, finiti nevid, ale crei elemente se numesc noduri sau vrfuri;

    U : este o mulime, de perechi ordonate de elemente din V, ale crei elemente se numesc arce.

  • 8/4/2019 Grafuri+Orientate

    2/30

    2

    Aceast definiie difer de prima definiie prin faptul ca acum nu se mai spune despre extremitile unui arcca trebuie s fie distincte. n baza acestei definiii, sunt permise i arce de genul: u=(x,x) unde xV; acestearce se numesc bucle.Exemplu de graf orientat (reprezentat grafic):V={1,2,3,4} U={(1,2),(2,3),(1,4), (4,4)}

    1

    Definiie.Se numetegraf orientat o pereche ordonatde mulimi notatG=(V, U), unde:V : este o mulime, finiti nevid, ale crei elemente se numesc noduri sau vrfuri;

    U : este o familie de perechi ordonate de elemente din V, numitfamilia de arce.

    Aceast definiie difer de cea anterioar prin faptul ca acum nu numai c se admit bucle, dar se admit i maimulte arce identice. Exemplu de graf orientat (reprezentat grafic):V={1,2 3,4}U={(1,2), (1,2), (2,1), (1,4), (2,3), (4,4)}

    1

    Observaie. Dac ntr-un graf orientat numrul arcelor identice nu depete numrul p, atunci senumete p-graf.

    2. Noiunea de graf parial

    Definiie. Fie G=(V, U) un graf orientat. Se numete graf parial, al grafului G, graful orientat G1=(V, U1)unde U1U.Atenie! Citind cu atenie definiia, de mai sus, tragem concluzia:

    Un graf parial, al unui graf orientat G=(V, U), are aceeai mulime de vrfuri ca i G, iar mulimea arceloreste o submulime a lui U sau chiar U.

    Exemplu: Fie graful orientatG=(V, U) unde: V={ 1,2,3,4}

    U={(1,2), (l,4), (2,3)}reprezentat grafic astfel:

    1. Un exemplu de graf parial al grafului G este

    graful orientat:G1=(V, U1) unde: V={ 1,2,3,4}

    U1={(1,2),(1,4)}(s-a eliminat arcul (2,3))

    reprezentat grafic astfel:1

    3

    2. Un exemplu de graf parial al grafului G estegraful orientat:reprezentat grafic astfel:G1=(V, U) unde: V={ 1,2,3,4}

    U1=(s-au eliminat toate arcele)1

    42

    3

  • 8/4/2019 Grafuri+Orientate

    3/30

    3

    Observaie. Fie G=(V, U) un graf orientat. Un graf parial, al grafului G, se obine pstrnd vrfurile ieliminnd eventual nite arce (se pot elimina i toate arcele sau chiar nici unul).

    3. Noiunea de subgraf

    Definiie.Fie G=(V, U) un graf orientat. Se numetesubgraf, al grafului G,graful orientat G1=(V1,U1)unde V1V iar U1 conine toate arcele din U care au extremitile n V1.

    Exemplu: Fie graful orientatG=(V, U) unde: V={ 1,2,3,4}

    U={(1,2), (2,3), (1,4)}reprezentat grafic astfel:

    1. Un exemplu de subgraf al grafului G estegraful orientat:G1=(V1, U1) unde: V1={1,2,3}

    (s-a ters nodul4)U1={(1,2),(2,3)}(s-a eliminat arcul (1,4))

    reprezentat grafic astfel:

    2. Un exemplu de subgraf al grafului G este grafulorientat:G1=(V1, U1) unde: V1={2,3,4}

    (s-a eliminat nodul 1)U1={(2,3)}(s-au eliminat arcele (1,4) (1,2))

    reprezentat grafic astfel:4

    Observaie. Fie G=(V, U) un graf orientat. Un subgraf, al grafului G, se obine tergnd eventual anumitevrfuri i odat cu acestea i arcele care le admit ca extremitate (nu se pot terge toate vrfurile deoareces-ar obine un graf cu mulimea vrfurilor vid).

    4. Gradul unui vrf

    Avnd la baz ideea c "raportat la un vrf exist arce care ies din acel vrfi arce care intr n acel vrf, auluat natere urmtoarele noiuni:

    - grad exterior- grad interior

    care vor fi prezentate in continuare.

    Grad exterior

    Definiie. Fie G=(V, U) un graf orientat si x un nod al su. Se numetegrad exterioral nodului x, numrularcelor de forma (x,y) (adicnumrul arcelor care ies din x), notatd

    +(x).

    Exemplu: Fie graful orientat:

    G=(V, U) unde: V={ 1,2,3,4}U={(1,2), (1,2), (2,1), (1,4), (2,3)> (4,4)}reprezentat grafic astfel:

    1

    Gradul exterior al nodului 1 este d+(1)=3 (n graf, sunt trei arce care ies din 1).Gradul exterior al nodului 2 este d+(2)=2 (n graf, sunt dou arce care ies din 2).

  • 8/4/2019 Grafuri+Orientate

    4/30

    4

    Gradul exterior al nodului 3 este d+(3)=0 (n graf, nu sunt arce care ies din 3).Gradul exterior al nodului 4 este d+(4)=1 (n graf, este un arc care iese din 4 (bucla)).Observaii.1. Mulimea succesorilor lui x se noteaz cu +(x) i se reprezint astfel:

    ( ) ( ){ }UyxVyx =+ , 2. Mulimea arcelor ce ies din x se noteaz cu +(x) i se reprezint astfel:

    ( ) ( ){ }VyUyxx =+ , 3. Legat de cardinalele mulimilor+(x) i +(x) putem scrie:

    ( ) ( ) ( )xdxx+++

    == Raportat la graful prezentat n figura de mai jos,

    1

    putem scrie:

    + (1)={2, 4} + (1)={(1,2), (1,4)} ( ) ( ) ( ) 2111 === +++ d

    + (2)={1, 3} + (2)={(2,1), (2,3)} ( ) ( ) ( ) 2222 === +++ d

    + (3)= + (3)= ( ) ( ) ( ) 0333 === +++ d

    + (4)={4} + (4)=f (4,4)} ( ) ( ) ( ) 1444 === +++ d

    Grad interior

    Definiie. Fie G=(V, U) un graf orientati x un nod al su. Se numetegrad interioral nodului x, numrularcelor de forma (y,x) ( adicnumrul arcelor care intr in x), notatd

    -(x).

    Exemplu: Fie graful orientatG=(V, U) unde: V={ 1,2,3,4}

    U= {(1,2), (1,2), (2,1), (1,4), (2,3), (4,4)}

    reprezentat grafic astfel:

    Gradul interior al nodului 1 este d -(1)=1 (n graf, este un arc care intr n 1).Gradul interior al nodului 2 este d - (2)=2 (n graf, sunt dou arce care intr n 2).Gradul interior al nodului 3 este d -(3)=1 (n graf, este un arc care intr n 3).Gradul interior al nodului 4 este d -(4)=2 (n graf, sunt dou arce care intr n 4).

    Observaii.1. Mulimea predecesorilorlui x se noteaz cu -(x) i se reprezint astfel:( ) ( ){ }UxyVyx = ,

    2. Mulimea arcelor ce intr in x se noteaz cu -(x) i se reprezint astfel:( ) ( ){ }VxUxyx = ,

    3. Legat de cardinalele mulimilor-(x) i -(x) putem scrie:

    ( ) ( ) ( )xdxx ==

    Raportat la graful prezentat n figura de mai jos,1

  • 8/4/2019 Grafuri+Orientate

    5/30

    5

    putem scrie:

    - (1)={2} - (1)={(2,1)} ( ) ( ) ( ) 1111 === d

    - (2)={1} - (2)={(1,2)} ( ) ( ) ( ) 1222 === d

    - (3)={2} -(3) = {(2,3)} ( ) ( ) ( ) 1333 === d

    - (4)={1,4} - (4)={(1,4),(4,4)} ( ) ( ) ( ) 2444 === d

    Observaie. Un nod se numete izolat dac:d+(x)=d-(x)=0

    Propoziie. n graful orientat G=(V, U), n care V={x1, x2, ...,xn} i sunt m arce, se verific egalitatea :

    ( ) ( ) mxdxdn

    i

    i

    n

    i

    i==

    =

    =

    +

    11

    5. Graf complet. Graf turneu

    Definiie.Fie G=(V, U) un graf orientat. Graful G se numetegraf complet dacoricare dou vrfuridistincte ale sale sunt adiacente.Douvrfuri x i y sunt adiacente dac:

    - ntre ele existarcul (x,y), sau

    - ntre ele existarcul (y,x), sau

    - ntre ele existarcele (x,y) i (y,x).

    Exemplu de graf orientat complet:G=(V, U) unde: V={1,2,3,4}

    U={(1,2),,(1,3), (1,4), (2,3), (2,4), (3,4)}Reprezentarea sa grafic este:

    1

    Propoziie. ntr-un graf complet cu n vrfuri, exist ntre2

    )1( nni n(n-1) arce. (U este privit ca o mulime

    (prima definiie a grafului) nu ca o familie)

    Demonstraie: Numrul cel mai mic de arce, cnd graful este complet, se obine atunci cnd nodurile suntunite doar printr-un singur arc i se determin astfel:Pentru fiecare vrf xi, numrul arcelor care intri ies este n-1, deci d

    +(xi)+ d-(xi)=n-1, pentru orice i=1..n.

    nsumnd toate aceste relaii, obinem:

    ( ) ( )( ) ( ) ( ) ( ) )1(11111

    =+=+ =

    =

    +

    ==

    +nnxdxdnxdxd

    n

    i

    i

    n

    i

    i

    n

    i

    n

    i

    ii (1)

    innd cont de faptul c:

    ( ) ( ) mxdxdn

    i

    i

    n

    i

    i==

    =

    =

    +

    11

    relaia (1) devine:( )

    2

    1)1(

    ==+

    nnmnnmm

  • 8/4/2019 Grafuri+Orientate

    6/30

    6

    Numrul cel mai mare de arce, cnd graful este complet, se obine atunci cnd nodurile sunt unite prin douarce, adic pentru nodurile x i y exist arcele (x,y) i (y,x), i este egal cu

    ( )( )1

    21

    2 =

    nnnn

    Lema Avem( )

    2

    1

    3nn

    grafuri complete cu n noduri.Definiie Ungraforientat esteturneu, dacoricare ar fi 2 vrfuri i i j, ij, ntre ele existun singur arc:arcul(i,j) sau arcul (j,i)Proprieti:

    1. Orice graf turneu este graf complet.2. Avem

    ( )

    2

    1

    2nn

    grafuri turneu cu n noduri3. n orice graf turneu exist un drum elementar care trece prin toate vrfurile grafului.

    Problem. Fiind dat un graf turneu, se cere s se afieze un drum elementar care trece prin toate vrfurile.#include#includeint s[20],a[20][20],n,L,i,j;void afisare_drum(){int i; cout

  • 8/4/2019 Grafuri+Orientate

    7/30

    7

    6. Conexitate

    n aceast seciune, vor fi prezentate noiunile:- lan- drum- circuit- graf conex- component conex

    Lan

    Definiie. Fie G=(V, U) un graf orientat. Se numete lan, n graful G, o succesiune de arce, notat

    kiiiuuuL ,...,,

    21= cu proprietatea ca oricare dou arce consecutive au o extremitate comun (nu are

    importan orientarea arcelor).Se ntlnesc noiunile:- extremitile lanului

    fiind dat lanulkiii

    uuuL ,...,,21

    = se numesc extremiti ale sale extremitatea arcului ui1 care nu este

    comun cu arcul ui2i extremitatea arcului uik care nu este comun cu arcul uik-1- lungimea lanului

    fiind dat lanulkiii

    uuuL ,...,,21

    = prin lungimea sa se nelege numrul de arce care apar n L;

    Exemplu de lan:cu reprezentarea grafic astfel:Fie graful G=(V, U), unde: V={1,2,3,4,5}

    U={(1,3),(1,4), (2,3), (2,4), (5,2)}={ u1, u2, u3, u4, u5 }

    1

    L1=[ u1 ,u3 ,u5] este, n graful G, lan cu lungimea 3 i extremitile 1 i 5.L2=[ u1 ,u2, u4, u5] este, n graful G, lan cu lungimea 4 i extremitile 3 i 5.

    Atenie! Dackiii

    uuuL ,...,,21

    = este lan n graful G, atunci i11

    ,...,,1 iii uuuL kk = este lan n graful G.

    Drum

    Definiie.Fie G=(V, U) un graf orientat. Se numetedrum, n graful G, o succesiune de noduri, notat

    kiiixxxD ,...,,

    21= , cu proprietatea Uxxxx

    kk iiii

    ,,...,,

    121(altfel spus

    kk iiiixxxx ,,...,,

    121 sunt arce).

    Se ntlnesc noiunile:- extremitile drumului

    fiind dat drumul kiii xxxD ,...,, 21= se numesc extremiti ale sale nodurile xi1 i xik (xi1 extremitate iniiali xik extremitate final)- lungimea drumului fiind dat drumul

    kiiixxxD ,...,,

    21= , prin lungimea sa senelege numrul de arce care apar n cadrul

    su;Exemplu de drum:Fie graful G=(V, U) unde:V={ 1,2,3,4,5 }U={(1,3), (4,1), (3,2), (2,4), (5,2)}cu reprezentarea grafic astfel:

  • 8/4/2019 Grafuri+Orientate

    8/30

    8

    D1=(1, 3, 2) este, n graful G, drum cu lungimea 2 i extremitile 1 i 2.D2=(4, 1, 3, 2) este, n graful G, drum cu lungimea 3 i extremitile 4 i 2.Atenie! Dac

    kiiixxxD ,...,,

    21= este drum, n graful G, atunci nu neaprat i

    1,...,,1 1 iiki xxxD k = este drum,

    n graful G.

    Definiie. Fie G=(V,U) un graf orientat. Se numetedrum elementar, n graful G, drumul

    kiiixxxD ,...,,

    21= cu proprietatea coricare dounoduri ale sale sunt distincte (altfel spus, printr-un nod

    nu se trece dect o singurdat).

    Exemplu: n graful de mai jos,1

    3

    drumul D1=(4, 1, 3, 2) este drum elementar.

    Definiie. Fie G=(V, U) un graf orientat: Se numete drum neelementar, n graful G, drumul

    kiiixxxD ,...,,

    21= cu proprietatea c nodurile sale nu sunt distincte dou cte dou (altfel spus, prin anumite

    noduri s-a trecut de mai multe ori).Exemplu: n graful de mai jos,

    1

    drumul D2=(4, 1, 3, 2, 4, 5, 2) este drum neelementar (prin 4 (i 2) s-a trecut de dou ori).

    Circuit

    Definiie: Fie G=(V, I) un graf neorientat. Se numete circuit, n graful G, drumulkiii

    xxxD ,...,,21

    = cu

    proprietatea c xi1 = xiki are arcele cel compun diferite dou cte dou (circuitul se noteaz n continuare cuC).Exemplu: n graful de mai jos,

    1

    3drumul C=(1, 3, 2, 4, 1) este circuit.Definiie. Fie G=(V, U) un graf orientat. Se numete circuit elementar, n graful G, un circuit cuproprietatea c oricare dou noduri ale sale, cu excepia primului i a ultimului, sunt distincte.Exemplu: n graful de mai jos,

    1

    3

    circuitul C=(1, 3, 2, 4, 1) este circuit elementar.

  • 8/4/2019 Grafuri+Orientate

    9/30

    9

    Definiie. Fie G=(V, U) un graf orientat. Se numete circuit neelementar, n graful G, un circuit cuproprietatea c nodurile sale, cu excepia primului i a ultimului, nu sunt distincte.Exemplu: n graful de mai jos

    1

    circuitul C=(1, 3, 4, 2, 5, 4, 1) este circuit neelementar (prin 4 s-a trecut de dou ori).

    Graf conex

    Definiie. Fie G=(V, U) un graf orientat. Graful G se numete conex dac pentru oricare dou vrfuri x i y,x#y, exist un lan de extremiti x i y.Exemplu de graf care este conex:

    3Graful este conex, deoarece oricare ar fi vrfurile x i y, x#y, exist un lan in G care s le lege.

    Exemplu de graf care nu este conex:1

    2Graful nu este conex, deoarece exist dou vrfuri, cum ar fi 1 i 4, pentru care nu exist nici un lan n grafcare s le lege.

    Component conex

    Definiie. Fie G=(V, U) un graf orientat. Se numete component conex un graf orientat G1=(V1 ,U1) careverific urmtoarele condiii:- este subgraf al grafului G;- este conex;- nu exist nici un lan n G care s lege un nod din V, cu an nod din V-V1.Exemplu: Fie graful G=(V, U) : V={1,2,3,4,5} i U={(1,2), (3,1), (3,2), (4,5)}

    1

    2

    Pentru graful de mai sus, graful G1=(V1,U1) unde: V1={4,5} i U1={(4,5)} este component conex,deoarece:- este subgraf al grafului G;- este conex;- nu exist nici un lan n G care s lege un nod din V, cu un nod din V-V1={1,2,3}La fel, se poate spune i despre graful G2=(V2,U2) unde: V2={1,2,3) i U2={(1,2)> (3,1), (3,2)}n concluzie, graful din figura de mai sus este format din dou componente conexe.Observaie. Fie G=(V, U) un graf orientat. Graful G este conex daci numai dac este format dintr-osingur component conex.Exemplu de graf conex (este format dintr-o singur component conex):

  • 8/4/2019 Grafuri+Orientate

    10/30

    10

    7. Reprezentarea grafurilor orientate

    Fie G=(V, U) un graf orientat, unde V={x1, x2,..., xn} i U={u1, u2,..., um} . Deoarece ntre mulimea {x1,x2,..., xn} i mulimea {1, 2,..., n} exist o bijecie, xii, putem presupune, fr a restrnge generalitatea,mai ales pentru a uura scrierea, c V={1, 2,..., n}.n baza celor spuse mai sus, mai departe, n loc de xi vom scrie i, i n loc de arcul (xi ,xj) vom scrie (i ,j).Pentru a putea prelucra un graf orientat cu ajutorul unui program, trebuie mai nti s fie reprezentat nprogramul respectiv.

    Pentru a reprezenta un graf orientat, ntr-un program, exist mai multe modaliti folosind diverse structuride date; dintre acestea n continuare vom prezenta:- reprezentarea prin matricea de adiacen;- reprezentarea prin matricea vrfuri-arce;- reprezentarea prin matricea drumurilor;- reprezentarea prin listele de adiacen;- reprezentarea prin irul arcelor.

    Matricea de adiacen

    Fie G=(V; U) un graf orientat cu n vrfuri (V={ 1,2, ..., n}) i m arce.Matricea de adiacen (AMn({0,1})), asociat grafului G, este o matrice ptratic de ordin n, cu

    elementele:( )

    ( )

    =

    Ujidaca

    Ujidacaa

    ji,,0

    ,,1,

    (altfel spus, ai,j=1, dac exist arc ntre i i j i ai,j=0 dac nu exist arc ntre i i j.Exemplul 1.Fie graful reprezentat ca n figura de mai jos:

    1

    2 3Matricea de adiacen asociat grafului este:

    =

    =

    0001

    0000

    1100

    0100

    44434241

    34333231

    24232221

    14131211

    aaaa

    aaaa

    aaaa

    aaaa

    A

    Exemplul 2.Fie graful reprezentat ca n figura de mai jos:

    1

    2 3Matricea de adiacen asociat grafului este:

    =

    =

    0010

    1001

    0100

    1010

    44434241

    34333231

    24232221

    14131211

    aaaa

    aaaa

    aaaa

    aaaa

    A

    * Comentarii:l. Matricea de adiacen este o matrice ptratic, de ordin n, i nu este neaprat simetric fa de diagonalaprincipal, aa cum este n cazul grafurilor neorientate.Secvenele de citire a matricei de adiacen:

    int a[100][100];.................coutn;for (i=1;i

  • 8/4/2019 Grafuri+Orientate

    11/30

    11

    a[x][y]=1;}....................

    2. Matricea de adiacen are toate elementele de pe diagonala principal egale cu 0 (ne referim la definiia 1,cnd graful nu are bucle).

    3. Numrul elementelor egale cu 1 de pe linia i este egal cu gradul exterior al vrfului i.int gr_ext(int i){int j , s;s=0;

    for (j=1;j

  • 8/4/2019 Grafuri+Orientate

    12/30

    12

    Exemplul 2 . Fie graful G :V={ 1,2,3,4},U={(1,2),(1,4),(2,3),(3,1),(3,4),(4,2)}=

    {u1, u2, u3, u4,u5, u6},reprezentat ca n figura de mai jos:

    1

    3Matricea vrfuri-arce asociat grafului este:

    =

    =

    110010

    011100

    100101

    001011

    464544434241

    363534333231

    262524232221

    161514131211

    bbbbbb

    bbbbbb

    bbbbbb

    bbbbbb

    B

    Comentarii:1. Matricea vrfuri-arce nu este neaprat o matrice ptratic.

    #Secvenele de citire a matricei vrfuri-arce:int b[100][100];.........................cout

  • 8/4/2019 Grafuri+Orientate

    13/30

    13

    5. Pe fiecare coloan j, exist un singur, element egal cu 1 i un singur element egal cu -1.Indicele liniei pe care se afl 1 este extremitatea iniial a arcului u;Indicele liniei pe care se afl -1 este extremitatea final a arcului u,

    Construirea matricei de adiacen, cnd se cunoate matricea vfuri-arce.- se parcurge matricea vrfuri-arce, de la prima pn la ultima coloan, cu j- pe coloana j, se depisteaz indicele liniei pe care se afl 1. fie acesta plus l;- pe coloana j, se depisteaz indicele liniei pe care se afl -I, fie acesta minus l;- n matricea de adiacen elementul a[plus l, minus l] se face 1.

    for (j=1 j

  • 8/4/2019 Grafuri+Orientate

    14/30

    14

    =

    =

    0101

    0000

    1101

    0100

    44434241

    34333231

    24232221

    14131211

    dddd

    dddd

    dddd

    dddd

    D

    Exemplul 2 .Fie graful G : V={1,2,3,4},U={(1,2),(1,4),(2,3),(3,1),(3,4),(4,2)}=

    {u1, u2, u3, u4, u5, u6}reprezentat ca n figura de mai jos:

    1

    3

    Matricea drumurilor asociat grafului este:

    =

    =

    0111

    1111

    1111

    1111

    44434241

    34333231

    24232221

    14131211

    dddd

    dddd

    dddd

    dddd

    D

    Comentarii:1. Matricea drumurilor este o matrice ptratic.

    n continuare, este prezentat n pseudocod algoritmul Roy-Warshall de determinare a matricei drumurilorplecnd de la matricea de adiacen. Algoritmul const ntr-un ir de transformri aplicate matricei deadiacen. Vom spune c exist drum de la nodul i la nodul j, dac gsim un nod k cu proprietatea c existdrum de la i la k i drum de la k la j. Astfel:Un element ai,j care este 0 devine1, dac exist un nod k a.. ai,k=1 i ak,j=1. Pentru a gsi toate arcelenodului k trebuie parcurse pe rnd n variabila k toate nodurile 1,2,.., n.

    ...............pentru k=1 ... n

    pentru i=1 ... n (i#k)pentru j = 1 ... n (j#k)

    dac ai,j=0 si i!=k si j!=k atunciai,j= aik * akj

    .....................

    2. Dac n matricea drumurilor dii=1, nseamn c exist n graf un circuit de extremiti i.3. Dac n matricea drumurilor linia i i coloana i au elementele egale cu 0, nodul i este un nod izolat.

    *Programul C/C++ de construirei afiare a matricei drumurilor.#include #include #include typedef int mat[30][30];mat a;int i, j, k, n, m, x, y;

    void main(){clrscr();coutn;coutm; secvena de citire afor (i=1;i

  • 8/4/2019 Grafuri+Orientate

    15/30

    15

    if (a[i][j]==0)a[i][j]=a[i][k] *a[k][j];

    cout

  • 8/4/2019 Grafuri+Orientate

    16/30

    16

    T2,1=5, pentru c primul vecin (3) al lui 1 s-a trecut la coloana 5 (T1,5=3);T2,5=6, pentru c urmtorul vecin (4) al lui 1 s-a trecut la coloana 6 (T1,6=4);T2,6=0, pentru c vecinul T1,6 (4) al lui 1 este ultimul din list.A treia etap. Se trec n tabel vecinii lui 2, ncepnd de la coloana 7.

    1 2 3 4 5 6 7 81 2 3 4 3 4 35 7 6 0 0

    T2,2=7, pentru c primul vecin (3) al lui 2 s-a trecut la coloana 7 (T1,7=3);T2,7=0, pentru c vecinul T1,7 (3) al lui 2 este ultimul din list.

    A patra etap. Se trec n tabel vecinii lui 3, ncepnd de la coloana 8.1 2 3 4 5 6 7 81 2 3 4 3 4 35 7 0 6 0 0

    T2,3=0, pentru c 3 nu are succesori, deci lista sa este vidUltima etap. Se trec n tabel vecinii lui 4, ncepnd de la coloana 8 (aici s-a ajuns)

    1 2 3 4 5 6 7 81 2 3 4 3 4 3 25 7 0 8 6 0 0 0

    T2,4=8, pentru c primul vecin (2) al lui 4 s-a trecut la coloana 8 (T1,8= 2);T2,8=0, pentru c vecinul T1,8 (2) al lui 4 este ultimul din list.

    2. Se folosete un tablou unidimensional, cu numele cap, i un tablou bidimensional, cu numele L (carereine listele succesorilor pentru fiecare nod), caracterizate astfel:Tabloul cap:- are n componente;- capi= c, dac primul nod din lista vecinilor lui i este trecut n tabloul L la coloana c, adic L1,c este

    primul vecin al lui i,i capi =0, dac nodul i nu are succesori.Tabloul L:- are m componente;- dac k este un vecin al nodului i, atunci:

    L1,p =k i L2,p=0, dac k este ultimul vecin din list, sau

    L1,p=k i L2,p=p+1, dac k nu este ultimul vecin din list.(p este coloana la care s-a ajuns n tabloul L)Exemplu de completare a tablourilor cap i L, pentru graful de la exemplul lTabloul cap

    1 2 3 41 3 0 4

    Tabloul L

    1 2 3 43 4 3 22 0 0 0

    3. Se folosete un tablou bidimensional, cu numele L, caracterizat astfel:- are n linii;- pe linia i; se trec succesorii nodului i.Exemplu de completare a tabloului L, pentru graful:Tabloul L

    3

    1 4

    2

    1 3

  • 8/4/2019 Grafuri+Orientate

    17/30

    17

    Implementarea n limbajul C++, a ideii prezentate mai sus, se realizeaz conform secvenei deprogram prezentat mai jos.

    ....................int L[20][20];int nr_vec[20];coutn;for (i=1;i

  • 8/4/2019 Grafuri+Orientate

    18/30

    18

    - deci, U={( el[1],e2[1]) , (el[2],e2[2]) ,..., ( el [m],e2[m])}

    Secvena C++corespunztoare este:int el[100], e2[100];int n, m, i;coutn;coutm;for (i=1;i

  • 8/4/2019 Grafuri+Orientate

    19/30

    19

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

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

    8. Graf tare conex. Componente tare conexe

    n aceast seciune, vor fi prezentate noiunile:- graf tare conex- component tare conex- algoritmul de descompunere a unui graf n componente tare conexe

    Graf tare conex

    Definiie. Fie G=(V, U) un graf orientat. Graful G se numete tare conex, dac pentru oricare dou vrfurix i y exist un drum n G de la x la y i un drum de la y la x. Exemplu de graf tare conex.

    1

    Graful este tare conex, deoarece, oricare ar fi vrfurile x i y, exist un drum in G de la x la y i un drum dela y la x.

    Component tare conex

    Definiie. Fie G=(V, U) un graf orientat. Se numete component tare conex, un graf orientat G1 =(V1, U1)care verific urmtoarele condiii:

    - este subgraf al grafului G- este tare conex;- oricareare fi xV-V1, subgraful lui G generat de V1U{x} nu mai este tare conex . Exemplu. Fie graful orientat prezentat n figura de mai jos:

    1

    3

    Acest graf are dou componente tare conexe:- subgraful generat de nodurile 1, 2, 3;- subgraful generat de nodurile 4, 5, 6.Observaie. Fie G=(V, U) un graf orientat: Graful G este tare conex, dac admite o singur component tareconex.

    Algoritmul de descompunere a unui graf n componente tare conexe

    Algoritmul procedeaz astfel:- la nceput, nu este depistat nici o component tare conex ( nc=0);- deci, nici un nod nu face parte din vreo component tare conex (luate=[ ]);- se parcurg nodurile grafului, cu i;

    - dac i nu a fost introdus n nici o component tare conex,

  • 8/4/2019 Grafuri+Orientate

    20/30

    20

    - se mrete numrul componentelor tare conexe cu 1,- se construiete noua component tare conex, astfel:

    - se intersecteaz predecesorii lui i cu succesorii si, i se reunesc cu {i}.

    Pentru implementarea acestui algoritm, n limbajul C++, cu ajutorul programului prezentat mai jos, s-aufolosit:Funciile:Succesori(i, S):care pune n irul S toate nodurile j, din graf , cu proprietatea c exist drum ntre i i ele.Predecesori(i, P):care pune n irul P toate nodurile j, din graf, cu proprietatea c exist drum ntre ele i i.

    Vectorul:Comp :ale crui componente, care sunt iruri de elemente, vor reine, la final, componentele tare conexe;Variabilele:d : matricea drumurilor;luate : un ir care reine toate nodurile care fac deja parte dintr-o component tare conex;nc : reprezint numrul componentelor tare conexe depistate;n program, au mai fost folosite i alte variabile dar deoarece rolul lor reiese foarte uor din urmrireaprogramului nu-l mai comentm.

    #include #include #include

    typedef int mat[20][20];typedef int sir[20];mat d;sir S, P, luate;sir comp[50], ncomp;int ok,nl, i, j, n, m, nc, ns, np;void succesori(int i, sir S, int& ns){int j;ns=0;for (j=1;j

  • 8/4/2019 Grafuri+Orientate

    21/30

    21

    }void main(){clrscr();coutn;for (i=1;i

  • 8/4/2019 Grafuri+Orientate

    22/30

    22

    ( )

    ==

    Ujisijidaca

    jidaca

    ttulcuarcunexistajsiiredacat

    cji

    ,,

    ,0

    coscosint,cos

    ,

    n cazul problemelor de maxim, fiind dat graful G=(V, U) i se asociaz matricea costurilor, forma 2, definitastfel:CMn (R), unde:

    ( )

    ==

    Ujisijidaca

    jidaca

    ttulcuarcunexistajsiiredacat

    cji

    ,,

    ,0

    coscosint,cos

    ,

    Exemplu: Fiind dat graful din figura de mai jos (costul fiecrui arc fiind scris pe ea)1 13

    3matricea costurilor se scrie in felul urmtor:Forma 1:

    =

    =

    014

    0

    1215013110

    44434241

    34333231

    24232221

    14131211

    cccc

    cccc

    cccc

    cccc

    C

    Forma 2:

    =

    =

    014

    0

    12150

    13110

    44434241

    34333231

    24232221

    14131211

    cccc

    cccc

    cccc

    cccc

    C

    Observaii.1. Matricea costurilor forma 1 difer de matricea costurilor forma 2 prin faptul c n loc de apare -.2: n program nu se poate scrie sau -, de aceea recomandm ca atunci cnd trebuie folosite s sedefineasc dou constante foarte mari, ca de exemplu, pentru : const p infinit = 1.e10;

    pentru - : const m infinit=-1.e10;n continuare, vor fi prezentai doi algoritmi care permit rezolvarea unor probleme de minim (maxim), ianume, vor fi prezentai:algoritmul Roy-Floyd i algoritmul lui Dijkstra..

    Algoritmul Roy-Floyd

    Acest algoritm se aplic n cazul problemelor n care se d un graf G=(V, U), care are matricea costurilor C,i se cere s se determine lungimea drumurilor minime, i n unele cazuri i nodurile care constituiedrumurile respective, ntre oricare dou noduri ale grafului.Observaie. Algoritmul are la baz urmtoarea idee:

    "Dac drumul minim de la nodul i la nodul j trece prin nodul k, atunci i drumul de nodul i lanodul k, precum i de la nodul k la nodul j, este minim"

    i const, de fapt, ntr-un ir de n transformri aplicate matricei costurilor C, astfel:Tk(C)=B , BMn (R), bi,j=minim(ci,j,ci,k+ck,j),i,j {1,..n}care se poate implementa astfel:

    for k=1 ... nfor i=1 ... n

    for j=l ... nif (c[i,j]

  • 8/4/2019 Grafuri+Orientate

    23/30

    23

    Descrierea detaliat a algoritmului prezentat mai sus:Pentru fiecare pereche de noduri (i,j), unde i,j { 1,...,n}, se procedeaz astfel:

    se parcurg cu k toate nodurile grafului, diferite de i i j,pentru fiecare nod k, se execut:

    dac costul drumului ntre nodurile i i j este mai mic dect suma costurilor drumurilorntre nodurile i i k i ntre nodurile k i j, atunci costul drumului iniial de la i la j se vanlocui cu costul drumului i-k-j, evident, acest lucru fcndu-se prin modificareamatricei costurilor.

    Observaie. Algoritmul prezentat n forma de mai sus, permite dect calcularea lungimii drumurilor minimentre oricare dou noduri ale grafului. Dac se dorete i afiarea nodurilor care compun efectiv acestedrumuri, va trebui completat astfel:Dac lungimea drumului miinim dintre nodurile i i j este egal cu suma dintre lungimile a 2 drumuri caretrec printr-un nod intremediar k atunci nodul k face parte din drumul de lungime minim de la i la j#include#include#includeint a[50][50],n,i,j,c,k,gasit=0,x,y;int const p_inf=10000;ifstream f("rf.in");void init() //se initializeaza matr costurilor

    {f>>n;for(i=1;ii>>j>>c) a[i][j]=c;f.close();}void transformare() //se transforma matriceacosturilor{for(k=1;k

  • 8/4/2019 Grafuri+Orientate

    24/30

    24

    for (k=1;k

  • 8/4/2019 Grafuri+Orientate

    25/30

    25

    for (i=1;i>y>>val;c[x][y]=val;}

    for (i=1;i

  • 8/4/2019 Grafuri+Orientate

    26/30

  • 8/4/2019 Grafuri+Orientate

    27/30

    27

    p 0 0 1 0 0 1

    Pasul 2

    Dintre nodurile nealese nc, nealese={2,3,4,5,6}, se alege nodul j pentru care dj=min{d2, d3, d4, d5, d6};deci, se alege j=3, pentru ca d3 =min{, 2, , , 2}

    1 2 3 4 5 6d 0 2p 0 1

    Se completeaz componentele vectorilor d i p, pentru nodurile nealese, astfel:2 : min(d2, d3+C3,2)=min(,2+)= (d2i p2 rmn nemodificate)4 : min(d4, d3+C3,4)=min(,2+)= (d4i p4 rmn nemodificate)5 : min(d5, d3+C3,5)=min(,2+)= (d5i p5 rmn nemodificate)6 : min(d6, d3+C3,6)=min(2,2+2)=2 (d5i p5 rmn nemodificate)

    1 2 3 4 5 6d 0 2 2p 0 0 1 0 0 1

    Pasul 3

    Dintre nodurile nealese nc, nealese={2,4,5,6}, se alege nodul j pentru care dj=min{d2, d4, d5, d6}; deci, sealege j=6, pentru c d6 =min{, , , 2}

    1 2 3 4 5 6d 0 2 2p 0 1 1

    Se completeaz componentele vectorilor d i p, pentru nodurile nealese, astfel:2 : min(d2, d6+C6,2)=min(,2+)= (d2i p2 rmn nemodificate)4 : min(d4, d6+C6,4) =min(,2+2)=4 (d4=4 i p4=6)5 : min(d5, d6+C6,5)=min(,2+3)=5 (d5=5 i p5=6)

    1 2 3 4 5 6d 0 2 4 5 2p 0 0 1 6 6 1

    Pasul 4

    Dintre nodurile nealese nc, nealese={2,4,5}, se alege nodul j pentru care dj=min{d2, d4, d5}; deci, se alegej=4, pentru c d min{, 4, 5}

    1 2 3 4 5 6d 0 2 4 2p 0 1 6 1

    Se completeaz componentele vectorilor d i p, pentru nodurile nealese, astfel:

    2 : min(d2, d4+C4,2)=min(,4+3)=7 (d2 =7 i p2 =4)5 : min(d5, d4+C4,5)=min(5,4+)=5 (d5i p5 rmn nemodificate)

    1 2 3 4 5 6d 0 7 2 4 5 2p 0 4 1 6 6 1

    Pasul 5Dintre nodurile nealese nc, nealese={2,5}, se alege nodul j pentru care dj=min{d2, d5}; deci, se alege j=5,pentru ca d5 =min{, 5}.

  • 8/4/2019 Grafuri+Orientate

    28/30

    28

    1 2 3 4 5 6

    d 0 2 4 5 2p 0 1 6 6 1

    Se completeaz componentele vectorilor d i p, pentru nodurile nealese, astfel:2 : min(d2, d5+C5,2)=min(7,S+)=7 (d2i p2 rmn nemodificate)

    1 2 3 4 5 6

    d 0 7 2 4 5 2p 0 4 1 6 6 1

    Concluzii:Drumurile minime de la nodul 1 la celelalte noduri sunt:2 : p2=4, p4=6, p6=1; deci, de la 1 la 2 avem : 1, 6, 4, 23 : p3=1; deci, de la 1 la 3 avem : 1, 34 : p4 =6, p6 =1; deci, de la 1 la 4 avem : 1, 6,45 : p5=6, p6=1; deci, de la 1 la 5 avem : 1, 6, 56.1 p6 =1; deci, de la 1 la 6 avem : 1, 6

    #include#include#includeifstream f("d.in");const p_inf=10000;float a[50][50],d[50],min;int n,i,j,pl,poz,p[50],s[50],c;void drum (int i){if(p[i]!=0) drum(p[i]);coutj>>c)a[i][j]=c;f.close();coutpl;for(i=1;i

  • 8/4/2019 Grafuri+Orientate

    29/30

    29

    {d[j]=d[poz]+a[poz][j];p[j]=poz;}}for(i=1;i

  • 8/4/2019 Grafuri+Orientate

    30/30

    if(p[i]!=0){cout


Recommended