You are on page 1of 33

GRAFURI

GRAFURI NEORIENTATE GRAFURI ORIENTATE

GRAFURI NEORIENTATE
       

Definitie Grad Gradul unui vrf. vrf. Graf par ial i subgraf Reprezentarea grafurilor neorientate neorientate Parcurgerea grafurilor neorientate Conexitate in grafuri neorientate Grafuri hamiltoniene si euleriene Aplicatii grafuri neorientate
back

Definitie
 

 

Definitie: Se numeste graf neorientat, o neorientat, pereche ordonata de multimi notata G=(X,U), unde X={x1,x2, ,xn} este o multime finite si nevida de elemnte numite noduri sau varfuri, iar U={u1,u2, ,un} este o multime de perechi neordonate de elemente din X numite muchii. muchii. Exemplu: G=(X,U) X={1,2,3,4,5,6,7,8,9,10} U={(1,2);(1,3);(1,5);(2,3);(6, 7);(6,10);(7,8);(8,9);(9,10)}

Grad Gradul unui vrf.


     

Gradul unui varf x, notat d(x), reprezinta numarul muchiilor care trec prin nodul x (incidente cu nodul x). Un varf care are gradul 0 se numeste varf izolat(de exemplu varful 4). Un varf care are gradul 1 se numeste varf terminal(de exemplu varful 5). Propozitie: Fie G=(X,U) un graf neorientat cu n noduri si m muchii, suma gradelor tuturor nodurilor este egala cu 2m. IntrIntr-un graf neorientat numarul nodurilor de grad impar este un numar par

back

Graf par ial i subgraf




Se numeste graf partial al grafului G=(X,U) un graf neorientat G =(X,V), unde VX. Altfel spus, un graf G a lui G, este chiar G sau se obtine din G pastrand toate varfurile si suprimand niste muchii. Se numeste subgraf al grafului G=(X,U) ungraf neorientat H=(Y,V), unde YX iar V Y contine toate muchiile din U care au ambele extremitati in multimea Y.

back

Reprezentarea grafurilor neorientate neorientate




Cele mai cunoscute forme de reprezentare ale unui astfel de graf sunt: matricea de adiacenta, listele vecinilor si vectorul muchiilor.




Matricea de adiacenta

       

Este o matrice patratica cu n linii si n coloane, in care elementele a[i,j] se definesc astfel: a[i,j]=1 daca exista (i,j) in U, cu x diferit de y si 0 daca nu exista (i,j) in U. Pentru graful G=(X,U) din figura de mai jos, matricea de adiacenta este: a[i,j]=a[j,i] oricare ar fi i,j {1,2, ..,n} Proprietatile matricei de adiacenta: A= Este o matrice simetrica; Pe diagonala principala are toate elementele egale cu 0; coloana Suma elementelor pe linia sau coloana i este egala cu gradul nodului i; Daca elementele pe linia/coloana i sunt toate egale cu 0 atunci nodul este izolat; Daca toate elementele din matrice,mai putin cele de pe diagonala principala, sunt 1 inseamna ca graful este complet.

0 1 1 1 1

1 0 1 0 2

1 1 0 1 3

1 0 1 0 4

linia 1 2 3 4

back

next

Listele vecinilor
   

Listele vecinilor Pentru fiecare nod al grafului se retin nodurile adiacente cu el. Pentru reprezentarea listei de adiacenta se poate folosi alocare dinamica. Exemplu pentru matricea de adiacenta de mai sus: nodul 1 2 3 4 lista vecinilor 2, 3, 4 1, 3 1, 2, 4 1, 3
0 1 A= 1 1 coloana 1 1 0 1 0 2 1 1 0 1 3 1 0 1 0 4 linia 1 2 3 4

back

next

Vectorul muchiilor.
    

Fiecare muchie a grafului poate fi privita ca o inregistrare cu doua componente: cele doua varfuri care constitue extremitatile muchiei. Notand aceste extremitati cu nod1 si nod2, putem defini tipul de nod2, date tmuchie, astfel: tmuchie, type tmuchie=record nod1,nod2:integer; end; Graful in ansamblul sau, este o multime de muchii, adica o multime de elemente de tipul tmuchie.In consecinta definim graful ca un tmuchie.In vector de muchii , adica un vector cu elementele de tipul tmuchie: tmuchie: var v:array[1..25] of tmuchie;

back

Graf complet si graf bipartit.


   

  

Se numeste graf complet cu n varfuri, notat Kn, un graf G=(X,U) cu proprietatea ca intre oricare doua varfuri exista o muchie. Exemplu: Un graf complet cu n varfuri are n*(n-1)/2 muchii. n*(nUn graf neorientat G=(X,U) se numeste bipartit daca exista 2 multimi de noduri A si BX astfel incat AB=X si AB=; iar orice muchie din U are o extremitate in multimea A si una in multimea B. Exemplu: Fie G=(X,U) unde X={1,2,3,4,5,6,7}, U={(1;5),(2;6),(3;6),(4;7)} Cu multimile A={1,2,3,4} si B={5,6,7} Se obesrva ca: AB=X, AB=, iar fiecare muchie are o extremitate in A si una in B. Se numeste graf bibartit complet, un graf complet, bipartit cu proprietatea ca pentru orice varf x din A si orice varf y din B, exista muchia(x,y) (unde A si B sunt cele doua submultimi care partitioneaza multimea varfurilorX). Exemplu: back

   

Prin parcurgerea grafurilor neorientate se intelege vizitarea varfurilor intr-o anumita ordine, ordine data intrde un anumit criteriu. Exista doua metode de parcurgere: Parcurgerea in latime BF(Breadth First); Parcurgerea in adancime DF(Depth First);

Parcurgerea grafurilor neorientate

Algoritmul de parcurgere in latime BF


   

    

   

Fiind dat un graf neorientat G=(X,U) si un nod xX, sa se parcurga toate varfurile grafului incepand din varful x. Metoda consta in: -se viziteaza varful de pornire, dupa care se viziteaza toate varfurile adiacente cu acesta care nu au fost vizitate inca,in continuare se alege primul varf adiacent cu varful de pornire si se viziteaza toate varfurile adiacente cu acesta nevizitate inca si asa mai departe pentru celelalte varfuri cat timp este posibil.Exemplu: Presupunem ca varful de pornire este 1,atunci parcurgerea BF este:1,2,5,6,3,4,7. Pentu 3 varf de pornire:3,2,4,1,5,6,7. Pentru implementare vom folosi un vector care are proprietatile unei cozi, fie c=(c1,c2, ,ck). Capetele de intoducere si extragere vor fi identificate prin pozitiile p si respectiv u. Notam cu n numarul de noduri din graf. Este necesar ca elemntele matricei de adiacenta a cu n linii*n linii*n coloane sa fie cunoscute. Mai avem nevoie de un vector viz cu n elemente, in care elementele viz[k] (k=1,2, .,n) au semnificatia: viz[i]=0, daca varful i nu a fost vizitat sau viz[i]=0 daca a fost vizitat. Mai intai initializam tot vectorul viz cu 0. Initial in coada se gaseste varful de pornire: p=1, u=1, c[p]:=x, viz[x]:=1. Cat timp mai sunt elemente in coada( while p<=u ): coada( Extragem din coada varful aflat in capatul de extragere u, si-l memoram intr-o variabila z{z:=c[p]}; siintrPe linia z in a cautam vecinii lui z si ii introducem in coada.

next

back

Parcurgerea grafurilor neorientate


  

 

Algoritmul de parcurgere in adancime DF Metoda consta in: -alegem varful de pornire, pentru acesta se alege primul vecin al sau nevizitat inca,pentru acest vecin cautam primul vecin al sau nevizitat si asa in continuare. In cazul in care un varf nu mai are vecini nevizitati atunci ne intoarcem la nodul anterior, iar pentru acel nod cautam urmatorul vecin nevizitat al sau. Pentru graful de mai sus parcurgerea in adancime plecand de la varful 1 este: 1,2,3,4,6,7,5. Pentru a implementa vom folosi o stiva si metoda backtracking.
back

Conexitate in grafuri neorientate




 

 

Prin parcurgerea in latime acelui graf am subliniat o proprietate importanta a grafului:faptul ca in urma parcurgerii au fost vizitate toate varfurile. Luand oricare doua varfuri,putem gasi cel putin un traseu care porneste dintr-un varf dintrsi ajunge in celalalt. Luand oricare doua varfuri, ele pot fi legate printrprintr-un lant. Dar nu toate grafurile sunt conexe. In schimb putem desprinde din el portiuni care, fiecare luata separat, este un graf conex. Exemplu: Se numeste componenta conexa a grafului G=(X,U), un subgraf G1=(X1,U1) a lui G, conex, cu proprietatea ca nu exista nici un lant care sa lege un varf din X1 cu un varf din X-X1. Xback

Grafuri hamiltoniene si euleriene


           

Se numeste ciclu hamiltonian intr-un graf, un ciclu elementar care contine intrtoate varfurile grafului. Un graf care contine un ciclu hamiltonian se numeste graf hamiltonian. hamiltonian. Un lant elementar care contine toate varfurile grafului se numeste lant hamiltonian. Un graf hamiltonian are cel putin trei varfuri. Graful complet cu n varfuri este un graf hamiltonian. Teorema: Fie G=(X,U), cu n>=3 varfuri, daca oricare ar fi x un nod al grafului si d(x)>=n/2, atunci graful este hamiltonian. Se numeste ciclu eulerian intr-un graf, un ciclu care contine toate muchiile intrgrafului. Un graf care contine un ciclu eulerian se numeste graf eulerian. eulerian. Un lant eulerian este un lant care contine toate muchiile grafului. Teorema: Un graf fara varfuri izolate este eulerian, daca si numai daca este conex si gradele tuturor varfurilor sunt numere pare.

back

GRAFURI ORIENTATE
    

Definitie Graful unui vrf. Mul imile i Graf par ial i subgraf Reprezentarea grafurilor orientate Drumuri si circuite in grafuri orientate Aplicatii grafuri orientate

back

Definitie


Numim graf orientat, o pereche ordonat de orientat, mul imi G=(X,U), unde: X este o mul ime finit i nevid numit mul imea nodurilor (vrfurilor); U este o mul ime format din perechi ordonate de elemente ale lui X, numit mul imea arcelor (muchiilor). Muchiile (muchiilor). Muchiile sunt diferen iate prin ordinea de scriere a simbolurilor. ordinea Arcul (x,y) nu este tot una cu arcul (y,x). tot
back next

Exemplu graf orientat




Pentru graful G=(X,U) din figura 1. avem: X={1, 2, 3, 4} i U={u1, u2, u3, u4, u5, u6, u7,}= {(1,1), (2,1), (3,2), (2,3), (2,4), (3,4), (3,4)} arc va fi de forma u= (x,y), unde x se nume te extremitate ini ial , iar y se nume te extremitate final a arcului. Cu alte cuvinte, arcul iese din nodul x i intr n nodul y . La fel ca la grafurile neorientate, vom spune c nodurile x i y sunt adiacente, iar arcul u i nodul x sunt incidente (la fel arcul x i nodul y). Nodul y se nume te succesor al lui x, iar nodul x se nume te predecesor al lui y. Un arc de forma (x,x), care iese din nodul x i intr tot x, se nume te bucl .
back

U1 1

U2 2 U3 U5 U4 3 U6 4 U7

Figura1

Graful unui vrf. Mul imile




 

Gradul exterior al unui vrf x, notat d+(x), reprezint num rul arcelor care ies din nodul x, adic num rul arcelor de forma (x,z) U. Analog, se define te gradul interior al unui vrf x, notat d(x), ca fiind num rul arcelor care intr n nodul x (de forma (y,x) U). mul imea nodurilor ce constituie + x ! _ X x, y U a y extremit i finale ale arcelor care pleac din nodul x. Pe scurt, mul imea succesorilor lui x; + x ! _ y, x U a y mul imea nodurilor ce constituie extremit i ini iale ale arcelor care pleac din nodul x. Pe scurt, mul imea predecesorilor lui x; +(x) = {u = (x,y)| u U} mul imea arcelor care ies din nodul x; -(x) = {u = (y,x)| u U} mul imea arcelor care intr n nodul x;


back

Graf par ial i subgraf




Fie graful G = (X,U). Un graf par ial al lui G, este un graf G1= (X,V), cu . Altfel spus, un graf par ial G1 al lui G, este chiar G, sau se ob ine din G p strnd toate vrfurile i suprimnd ni te muchii. Fie graful G = (X,U). Un graf par ial al lui G, este un graf G1= (Y,T), unde i , iar T va con ine numai muchiile care au ambele extremit i n Y. Altfel spus, un graf par ial G1 al lui G, se ob ine din G eliminnd ni te vrfuri i p strnd doar acele muchii care au ambele extremit i n mul imea vrfurilor r mase.

back

Reprezentarea grafurilor orientate




    

Cele mai cunoscute forme de reprezentare sunt: matricea de adiacen matricea vrfuri arce matricea drumurilor listele vecinilor. reprezentarea grafului ca un vector de muchii
back

Matricea de adiacen


Are aceea i semnifica ie ca n cazul grafurilor neorientate: fiecare element a[i,j], cu i,j {1,2,...,n}, este: 1 dac exist arcul (i,j), respectiv 0 n caz contrar. Datorit orient rii, a a cum am mai spus, arcul (i,j) nu este totuna cu arcul (j,i). Prin urmare, a[i,j] a[j,i]. A adar matricea de adiacen nu mai este simetric fa de diagonala principal , a a cum se ntmpla n cazul grafurilor neorientate.




Pentru graful G=(X,U) din figura 5, matricea de adiacen


2

este:

coloana

1 0

2 0 0 0 1

3 0 1 0 0

4 0 1 1 0 1 2 3 4

1 4 Figura 5

A=

1 0 0

back

Matricea vrfuri


arce

Este o matrice b cu n linii i m coloane, n care fiecare element b[i,j] este: 1, dac nodul i este o extremitate ini ial a arcului uj; -1, dac nodul i este o extremitate final a arcului uj; 0, dac nodul i nu este o extremitate a arcului uj.
2 Pentru graful de mai jos cu n=4 noduri i m=5 arce, matricea vrfuri

arce este:
0 0 1 -1 0 0 -1 1

1
u2 u1 1 u4 4 u5 u3

0 -1 1 0

0 -1 0 1

-1 0 0

Figura 6 Observa ii: Pe fiecare coloan j (aferent arcului uj), avem exact dou elemente nenule: un 1 (linia i pe care se afl reprezint extremitatea ini ial a arcului uj) i un -1 (linia i pe care se afl reprezint extremitatea final a arcului uj) Num rul valorilor de 1 de pe linia i, reprezint gradul exterior al nodului i (num rul arcelor ce au ca extremitate ini ial pe i), iar num rul valorilor de -1 de pe linia i reprezint gradul interior al nodului i (num rul arcelor care au ca extremitate final pe i). back

Listele vecinilor
2

Pentru fiecare nod x se construiesc dou liste ale vecinilor s i: L*(x) lista vecinilor succesori; con ine nodurile ce sunt extremit i finale ale arcelor care ies din nodul x. L-(x) lista vecinilor predecesori; con ine nodurile ce sunt extremit i ini iale ale arcelor care intr n nodul x.

u2 3

u1 1 u4

u3

4 u5 Figura 6

Nodul x 1 2 3 4

L*(x) 2 vid 2,4 2,3

L-(x) vid 1,3,4 4 3

back

Drumuri si circuite in grafuri orientate


  

 

Se nume te lan intr-un graf orientat, o mul ime de arce L={u1,u2,...,uk}, intrcu proprietatea ca oricare doua arce vecine in mul ime au o extremitate comuna. Un lan este de fapt un traseu care une te prin arce doua noduri numite extremit ile lan ului, f r a tine cont de orientarea arcelor componente. componente. Se nume te drum n graful G, un ir de noduri D={z1, z2, z3, , zk}, unde z1, z2, z3, , zk apar in lui x, cu proprietatea c oricare dou noduri consecutive sunt adiacente, adic exist arcele [z1, z2], [z2, z3], , [zk[zk1,zk] apar in lui U. Dac nodurile z1, z2, z3, , zk sunt distincte dou cte dou , drumul se nume te elementar. n caz contrar, drumul este ne-elementar. elementar. neSe nume te circuit ntr-un graf, un lan L={z1, z2, z3, , zk} cu ntrproprietatea c z1=zk i arcele [z1, z2], [z2, z3], , [zk-1,zk] sunt [zkdistincte dou cte dou . Dac ntr-un circuit, toate nodurile cu excep ia primului i ultimului sunt ntrelementar. distincte dou cte dou , atunci circuitul se nume te elementar. n caz contrar, el este ne-elementar. ne-elementar. back

Matricea drumurilor.
Este o matrice d cu n linii i n coloane, n care fiecare element d[i,j] este : -1, dac exist drum de la nodul i la nodul j n graf; -0, n caz contrar. Algoritmul Roy-Warshall de determinare a matricei drumurilor RoyMatricea drumurilor se ob ine aplicnd matricei de adiacen transform ri succesive. Vom spune c exist drum de la nodul i la nodul j, dac g sim un nod k (diferit de i, j) cu proprietatea c exist drum de la i la k i drum de la j la k. Astfel: un element a[i, j] care este 0, devine 1, dac exist un nod k astfel nct a[i, k]=1 i a[k, j]=1. Pentru a g si arcele nodului k, trebuie parcurse pe rnd n varianta k toate nodurile 1, 2, , n. for k:=1 to n do for i:=to n do { i k} k} for j:=1 to n do { j k} k} if (a[i, j]=0) and (i<>k) and (j<>k) then a[i, j]:=a[i,k]*a[k, j]; Atribuirea a[i, j]:=a[i,k]*a[k, j] este o scriere elegant a regulii de mai sus: n cazul n care unul din elementele a[i,k], a[k, j] este 0, a[i, j] va r mne 0; dac a[i, k]=1 i a [k, j]=1, atunci a[i, j] devine 1.

back

next

Algoritmul Roy-Warshall de determinare a Roymatricei drumurilor




Fie graful orientat G cu n=4 noduri i matricea sa de adiacen a:

0 0 A! 0 1

1 1 0 0 1 1 0 0 0 1 0 0

Graful are n=4 noduri , deci matricea de adiacenta va suferi patru transformari intr-un ciclu, pentru intrk=1,2,3,4. back

3 next

Pentru k=1 Se parcurg elementele matricii, dar cu conditia suplimentara i k si j k. Asadar la prima transformare nu vor fi analizate elementele de pe linia 1 si coloana 1. Dintre restul elementelor se repereaza cele egale cu 0, adica: a[2,2],a[3,2], a[3,3], a[3,4],a[4,3],a[4,4]. a[i,j]:=a[i,k]*a[k,j] a[2,2]:=a[2,1]*a[1,2]=0 a[3,3]:=a[3,1]*a[1,3]=0 a[4,3]:=a[4,1]*a[1,3]=1 a[3,2]:=a[3,1]*a[1,2]=0 a[3,4]:=a[3,1]*a[1,4]=0 a[4,4]:=a[4,1]*a[1,4]=0 back

0 0 A! 0 1

1 1 0 0 1 1 0 0 0 1 0 0

Matricea de adiacenta va deveni:

0 0 A! 0 1

1 1 0 0 1 1 0 0 0 1 1 0
next

Pentru k=2 Se parcurg elementele matricii, dar cu conditia suplimentara i k si j k. Asadar la a doua transformare nu vor fi analizate elementele de pe linia 2 si coloana 2. Dintre restul elementelor se repereaza cele egale cu 0, adica: a[1,1], a[1,4], a[3,1], a[3,3], a[3,4], a[4,4] a[i,j]:=a[i,k]*a[k,j] a[1,1]:=a[1,2]*a[2,1]=0 a[1,4]:=a[1,2]*a[2,4]=1 a[3,1]:=a[3,2]*a[2,1]=0 a[3,3]:=a[3,2]*a[2,3]=0 a[3,4]:=a[3,2]*a[2,4]=0 a[4,4]:=a[4,2]*a[2,4]=1 back

0 0 A! 0 1

1 1 0 0 1 1 0 0 0 1 1 0

Matricea de adiacenta va deveni:

0 0 A! 0 1

1 1 1 0 1 1 0 0 0 1 1 1
next

Pentru k=3 Se parcurg elementele matricii, dar cu conditia suplimentara i k si j k. Asadar la a treia tranformare nu vor fi analizate elementele de pe linia 3 si coloana 3. Dintre restul elementelor se repereaza cele egale cu 0, adica: a[1,1], a[1,4], a[2,1], a[2,2] a[i,j]:=a[i,k]*a[k,j] a[1,1]:=a[1,3]*a[3,1]=0 a[1,4]:=a[1,3]*a[3,4]=0 a[2,1]:=a[2,3]*a[3,1]=0 a[2,2]:=a[2,3]*a[3,2]=0

0 0 A! 0 1

1 1 0 0 1 1 0 0 0 1 1 1

Matricea de adiacenta va deveni:

0 0 A! 0 1

1 1 1 0 1 1 0 0 0 1 1 1
next

back

Pentru k=4 Se parcurg elementele matricii, dar cu conditia suplimentara i k si j k. Asadar la ultima tranformare nu vor fi analizate elementele de pe linia 4 si coloana 4. Dintre restul elementelor se repereaza cele egale cu 0, adica: a[1,1], a[2,1], a[2,2], a[3,1], a[3,2], a[3,3] a[i,j]:=a[i,k]*a[k,j] a[1,1]:=a[1,4]*a[4,1]=1 a[2,1]:=a[2,4]*a[4,1]=1 a[2,2]:=a[2,4]*a[4,2]=1 a[3,1]:=a[3,4]*a[4,1]=0 a[3,2]:=a[3,4]*a[4,2]=0 a[3,3]:=a[3,4]*a[4,3]=0 back

0 0 A! 0 1

1 1 1 0 1 1 0 0 0 1 1 1

Matricea drumurilor va deveni:

1 1 A! 0 1

1 1 1 1 1 1 0 0 0 1 1 0

aplicatie

Reprezentarea grafului ca un vector de muchii


       

 

Fiecare arc al grafului poate fi privit ca o nregistrare cu dou componente, n spe cele dou noduri care constituie extremit ile arcului: nod_in -> nodul din care iese arcul ( nodul de nceput al arcului); nod_sf -> nodul n care intr arcul ( nodul de sfr it al arcului); Putem defini tipul de date ARC, astfel: type ARC=record nod_in, nod_sf: integer; end; Graful n ansamblul s u, este o mul ime de arce, adic o mul ime de elemente de tipul ARC. n consecin , definim graful ca un vector de arce , adic un vector de elemente de tipul ARC: var v: array [1..25] of ARC; Num rul real de elemente este num rul de arce m. Astfel, elementele efectiv folosite ale vectorului vor fi v[1], v[2],..., v[m]. Fiecare element {1, 2, ..., m}) este de tipul ARC i reprezint unIv[i] (cu i arc al grafului, avnd dou componente: v[i].nod_in i v[i].nod_sf -> nodurile extremit i ale arcului.

home




 

Se d un grup format din n persoane, care se cunosc sau nu ntre ele. De la tastatur se introduc m perechi de numere ntregi (x,y) cu semnifica ia persoana x cunoa te pe persoana y . rela ia de cuno tin nu este neap rat reciproc . Numim celebritate, o persoan care este cunoscut de c tre toate celelalte persoane din grup, dar ea nu cunoa te pe nici un alt membru al grupului. S se determine dac din grup exist o astfel de celebritate. Interpretarea datelor. Problema poate fi modelat ntr-un graf orientat, n ntrcare nodurile sunt persoanele 1,2,3...n, iar arcele sunt rela iile de cuno tin ntre aceste persoane. O rela ie de cuno tin este de forma (x,y) cu semnifica ia persoana x o cunoa te pe persoana y . De exemplu, dac grupul are n=4 persoane, iar cele m=5 rela ii de cuno tin sunt (1,3), (2,3), (4,3), (1,2), (1,4), atunci graful i matricea sa de adiacen arat astfel: 3

Celebritate.

Aplicatii grafuri orientate

0 0 A! 0 0

1 1 1 0 1 0 0 0 0 0 1 0

back

Rezolvare n procedura citire_graf se citesc de la tastatur m perechi de numere ntregi de forma (x,y) reprezentnd extremit ile celor m arce ale grafului, i se constituie matricea de adiacen a, cu n linii * n coloane. Algoritmul de c utare a celebrit ii cuprins n procedura celebritate. Pentru nceput, vom c uta o persoan pe care o vom numi n continuare candidat la celebritate. Memor m acest candidat n variabila candid. Presupunem c ini ial candidatul este persoana 1 (candid:=1). Cercet m celelalte persoane, ntr-un ciclu cu i de la 2 la n. Pentru fiecare persoan i, trebuie s facem o testare. n cazul n care candidatul actual candid o cunoa te i (a[candid,i] este 1) candid nu mai poate fi celebritate (celebritate nu trebuie s cunoasc nici o alt persoan din grup !). n aceast situa ie, noul candidat la celebritate devine i (candid:=1). La finele parcurgerii de mai sus, n variabila candid vom avea a adar un candidat la celebritate. Mai r mne s vedem dac acest candidat este cunoscut de c tre celelalte persoane. n exemplul de mai sus, urmare a faptului c persoana 3 este celebritate, avem rela iile (1,3), (2,3) i (4,3), adic a[1,3]=a[2,3]=a[4,3]=0. n consecin , pe coloana 3 avem n-1 valori de 1. Pe caz general, trebuie s num r m valorile de 1 de pe coloana candid n matricea de adiacen , n adiacen , iar dac g sim n-1 valori, atunci persoana candid este ntr-adev r celebritate.

next

Aplicatii grafuri orientate





Un CD valoros ntrntr-un grup sunt n elevi, b ie i i fete, pe care-i numerot m 1, 2, , n. Fiecare elev cunoa te o careparte dintre ceilal i elevi. Rela ia de cuno tin nu este neap rat reciproc (dac x l cunoa te pe y, asta nu nseamn c i y trebuie s l cunoasc pe x). Unul dintre elevi are un CD foarte valoros, cu multe jocuri demonstrative, pe care to i membri grupului vor s -l aib fie i pentru scurt timp, pentru a i-l copia pe calculatorul propriu. CD ul circul printre membrii grupului n ifelul urm tor: fiecare elev dup ce l-a primit de la altcineva l d mai departe, dar numai unui lelev pe care l cunoa te, pentru c nu dore te s ajung n mna unor persoane n care nu poate avea ncredere. Determina i o modalitate (dac exist ) prin care CD-ul s circule exact o singur CDdat pe la fiecare elev, transmiterea lui f cndu-se numai c tre o cuno tin , iar n final CD-ul s cnduCDajung din nou la proprietarul s u. Interpretarea datelor Rela iile de cuno tin din cadrul grupului pot fi re inute ntr-o matrice a cu n linii i n coloane, n ntrfiecare element a[i, j] este: 1 dac elevul i l cunoa te pe elevul j, respectiv 0 n caz contrar. Cu datele problemei putem construi un graf n care nodurile sunt elevii 1, 2, 3, , n, iar arcele sunt rela iile de cuno tin din grup. Astfel, va exista arc de la nodul x la nodul y dac elevul x n cunoa te pe elevul y. ntruct n enun se precizeaz c rela iile de cuno tin nu sunt neap rat reciproce ( x cunoa te pe y nu implic y cunoa te pe x ), rezult c avem de-a face cu un graf deorientat. Matricea a definit mai nainte este tocmai matricea de adiacen a grafului. Traseul pe care l parcurge CD-ul pleac dintr-un nod (proprietarul s u), trecnd prin fiecare CDdintrnod (pe la fiecare elev) o singur dat . Transmiterea se face numai c tre o cuno tin . Astfel, de la elevul x va ajunge la elevul y numai dac exist arc (cuno tin ) de la x la y. n final, traseul se ncheie n nodul de unde a plecat (CD-ul se ntoarce la proprietarul ini ial). Un traseu care (CDrespect condi iile de mai sus nu este altceva dect un circuit elementar care trece prin toate nodurile grafului: drum deoarece poate trece de la un nod la altul numai printr-un arc, elementar printrdeoarece nu trece de dou ori prin acela i nod, i n sfr it circuit pentru c revine n nodul de plecare.

 

back

Tema Matricea drumurilor


Se citesc de la tastatur m perechi de numere ntregi reprezentnd extremit ile arcelor unui graf orientat cu n vrfuri i m muchii. muchii.S se construiasc matricea de adiacen , apoi s se determine i s se afi eze n fisierul drum. drum.out matricea drumurilor (se folose te algoritmul RoyRoyWarshall ).