14
Informatica clasa a XI-a 1 REPREZENTAREA GRAFURILOR NEORIENTATE 1. Noţiunea de graf neorientat .................................................................................... 2 2. Reprezentarea grafurilor neorientate .................................................................... 4 3. Matricea de adiacenţă .............................................................................................. 4 4. Matricea de incidenţă ............................................................................................... 6 5. Listele vecinilor ......................................................................................................... 7 6. Reprezentarea grafului ca vector de muchii .......................................................... 7 7. Matricea costurilor ................................................................................................... 8 8. Afişarea muchiilor unui graf neorientat................................................................. 9 9. Determinarea gradelor vârfurilor unui graf neorientat ..................................... 10 10. Noţiunile de graf parţial şi subgraf ..................................................................... 11 11. Graf complet şi graf bipartit................................................................................ 13

REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

  • Upload
    others

  • View
    41

  • Download
    2

Embed Size (px)

Citation preview

Page 1: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

1

REPREZENTAREA GRAFURILOR NEORIENTATE

1. Noţiunea de graf neorientat .................................................................................... 2

2. Reprezentarea grafurilor neorientate .................................................................... 4

3. Matricea de adiacenţă .............................................................................................. 4

4. Matricea de incidenţă ............................................................................................... 6

5. Listele vecinilor ......................................................................................................... 7

6. Reprezentarea grafului ca vector de muchii .......................................................... 7

7. Matricea costurilor ................................................................................................... 8

8. Afişarea muchiilor unui graf neorientat ................................................................. 9

9. Determinarea gradelor vârfurilor unui graf neorientat ..................................... 10

10. Noţiunile de graf parţial şi subgraf ..................................................................... 11

11. Graf complet şi graf bipartit ................................................................................ 13

Page 2: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

2

1. Noţiunea de graf neorientat

Definiţie: Se numeşte graf neorientat o pereche ordonată de mulţimi (X,U), unde:

X este o mulţime finită şi nevidă de elemente numite vârfuri sau noduri

U este o mulţime de perechi neordonate de câte două elemente din X, numite muchii sau arce

Un graf neorientat poate fi reprezentat sub forma unei figuri geometrice alcătuită din puncte (vârfuri,noduri) şi linii drepte sau curbe care unesc aceste puncte (muchii, arce). Respectând o anumită tradiţie pe care o regăsim în literatura de specialitate, vom folosi:

pentru grafuri neorientate termenii de vârf şi muchie

pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile x şi y, atunci ea se notează [x,y] sau (x,y).

Exemplu: Pentru graful G=(X,U) din figura alăturată avem:

X={1,2,3,4,5,6,7} mulţimea vârfurilor

U={u1,u2,u3,u4,5} mulţimea muchiilor

muchiile sunt: u1=(1,2),u2=(2,3),u3=(3,4),u4=(2,4),u5=(5,6)

Pe caz general, într-un graf neorientat G=(X,U),notăm:

mnumărul muchiilor

nnumărul vârfurilor

X={x1,x2,…….,xn}mulţimea vârfurilor

U={u1,u2,……um}mulţimea muchiilor

muchia uk este o pereche neordonată (a,b) alcătuită din două elemente din X

Pentru o muchie uk=(a,b), vom spune că:

vârfurile a şi b sunt adiacente şi se numesc extremităţile muchiei uk

muchia uk şi vârful a, respectiv vârful b , sunt incidente în graf

muchia (a,b) este totuna cu muchia (b,a) (nu există o orientare a muchiei)

Definiţie: Gradul unui vârf x, notat d(x), reprezintă numărul muchiilor care trec prin nodul x

(incidente cu nodul x).

Page 3: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

3

Exemplu: În graful din figura de mai sus avem : d(1)=d(5)=d(6)=1,d(2)=3,d(3)=d(4)=2,

d(7)=0.

Un vârf care are gradul 0, se numeşte vârf izolat (de exemplu, vârful 7).

Un vârf care are gradul 1, se numeşte vârf terminal (de exemplu, vârfurile 5 şi 6).

Teoremă: Într-un graf G=(X,U) cu n vârfuri şi m muchii, suma gradelor tuturor vârfurilor este egală

cu 2*numărul muchiilor:

mxdxdxdxd n

n

i

i *2)(........)()()( 21

1

Demonstraţia este evidentă. Fiecare muchie de forma [xi,xj] contribuie cu o unitate la gradul

vârfului i şi cu o unitate la gradul vârfului j. Aşadar fiecare muchie adaugă două unităţi la suma

gradelor. Fiind m muchii, rezultă că suma gradelor este 2m.

Consecinţă: În orice graf neorientat G=(X,U) există un număr par de vârfuri cu grad impar.

Definiţie: Se numeşte un graf regulat un graf în care toate vârfurile au acelaşi grad. Dacă gradul este k, graful se numeşte k-regulat.

Exemplu: Graful următor este un graf 3-regulat (toate vârfurile au gradul 3).

Definiţie : Fiind dat un şir D=(d1,d2,..,dn) format din n numere întregi pozitive, el se numeşte şir

grafic dacă există un graf neorientat ale cărui vârfuri să aibă drept grade numerele date. Evident, condiţiile necesare pentru ca şirul D să fie şir grafic sunt:

a) 0<din-1, () i1,2....n

b) d1+d2+.......+dn=2*k (număr par)

Page 4: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

4

2. Reprezentarea grafurilor neorientate

Considerăm un graf neorientat G=(X,U) cu m muchii şi n vârfuri numerotate 1,2,3,.....,n.

Cele mai cunoscute forme de reprezentare ale unui astfel de graf sunt:

matricea de adiacenţă matricea de incidenţă listele vecinilor vectorul muchiilor matricea costurilor

Pentru implementările acestor metode de reprezentare vom considera definiţiile globale de constante şi tipuri următoare: #define N 50 //numărul de vârfuri

#define M 100 //numărul de muchii

#define INF 32000

typedef unsigned char tip;

3. Matricea de adiacenţă Este o matrice pătratică binară Anxn în care un element aij este definit astfel:

a[i][j]= 1, dacă există muchia [i,j] cu ij 0, în caz contrar

Exemplu: pentru graful următor, matricea de adiacenţă este:

Elementul a[2][3] (de pe linia 2 şi coloana 3) va fi 1, întrucât există în graf muchia (2,3). Dar

acestă muchie este identică cu muchia (3,2), deci şi a[3][2] este 1.

Pe caz general, a[i][j]=a[j][i] oricare ar fi i,j{1,2,……..,n} , cu ij, adică, pentru

orice graf neorientat, matricea de adiacenţă a este simetrică faţă de diagonala principală. Deoarece grafurile studiate nu admite muchii de forma (i,i) (numite bucle), pe diagonala

principală matricea de adiacenţă are doar valori 0.

coloana 1 2 3 4

1 0 1 1 1 liniile 2 1 0 1 0

3 1 1 0 0

4 1 0 0 0

Page 5: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

5

Observaţii Suma elementelor de pe linia x sau de pe coloana x din matricea de adiacenţă reprezintă

gradul nodului x.

Muchiile distincte din graf se regăsesc în jumătatea superioară a matricei de adiacenţă. Suma tuturor valorilor din matricea de adiacenţă este număr par egal cu de două ori numărul

muchiilor din graf.

Pentru memorarea în programe a matricei de adiacenţă se folosesc matrici pătratice binare. Uzual, dintr-un fişier text se citesc numărul vârfurilor şi, eventual, cel al muchiilor, apoi perechi de valori diferite de vârfuri din graf reprezentând extremităţile unei muchii. Din fiecare pereche citită, două valori din matricea de adiacenţă (valori simetrice) primesc valoarea 1. Funcţia următoare citeşte dintr-un fişier text informaţiile referitoare la un graf în forma descrisă mai sus şi construieşte matricea de adiacenţă. void citire(tip a[N][N],int &n,int &m)

int k,x,y;

ifstream f(".....");

f>>n>>m; //numarul de varfuri si numarul de muchii

for(k=1;k<=m;k++)

f>>x>>y; //extremitatile unei muchii

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

f.close();

Dacă nu se precizează numărul muchiilor din graf, funcţia de citire se modifică în felul următor: void citire(tip a[N][N],int &n)

int x,y;

ifstream f(".....");

f>>n; //numarul de varfuri

while(!f.eof())

f>>x>>y; //extremitatile unei muchii

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

f.close();

Dacă în fişier este memorată integral matricea de adiacenţă, citirea se face element cu element ca în funcţia următoare: void citire(tip a[N][N],int &n)

int x,y;

ifstream f(".....");

f>>n; //numarul de varfuri

for(x=1;x<=n;x++)

for(y=1;y<=n;y++) f>>a[x][y]);

f.close();

Page 6: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

6

4. Matricea de incidenţă

Pentru graful G=(X,U) cu n vârfuri şi m muchii, matricea de incidenţă a are n linii şi m coloane

şi se defineşte astfel: 1, dacă vârful xi este incident cu muchia mj

a[i][j]= 0, în caz contrar

Exemplu: Fie graful G=(X,U) din figura alăturată cu X={1,2,3,4,5,6} şi U={[1,2],[1,3],[1,4],[1,5],[1,6],[2,4],[3,5],[3,6],[4,5],[5,6]}

Pentru acest graf, asociind fiecăruia dintre vârfuri câte o linie a matricei şi fiecărei muchii câte o coloană, se obţine matricea de incidenţă:

u1 u2 u3 u4 u5 u6 u7 u8 u9 u10

x1 1 1 1 1 1 0 0 0 0 0

x2 1 0 0 0 0 1 0 0 0 0

x3 0 1 0 0 0 0 1 1 0 0

x4 0 0 1 0 0 1 0 0 1 0

x5 0 0 0 1 0 0 1 0 1 1

x6 0 0 0 0 1 0 0 1 0 1

Observaţii: Fiecare coloană din matricea de incidenţă conţine exact două valori nenule. Suma elementelor de pe linia x din matricea de incidenţă reprezintă gradul nodului x.

Suma tuturor elementelor din matricea de adiacenţă este un număr par (de două ori numărul muchiilor).

Pentru memorarea în programe a matricei de adiacenţă se folosesc matrici binare Anxm.

Matricea de incidenţă se poate construi prin citirea muchiilor dintr-un fişier text. Muchiile se vor numerota în ordinea citirii din fişier şi fiecare muchie este incidentă cu extremităţile ei. Funcţia următoare ilustrează modul de construire a matricii de incidenţă prin citirea informaţiilor dintr-un fişier text. void citire(tip a[N][M],int &n,int &m)

int k,x,y;

ifstream f(".....");

Page 7: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

7

f>>n>>m; //numarul de varfuri si numarul de muchii

for(k=1;k<=m;k++)

f>>x>>y; //extremitatile unei muchii

a[x][k]=a[y][k]=1;

//muchia k este incidenta cu extremitatile x si y

f.close();

5. Listele vecinilor

Pentru fiecare nod i{1,2,……,n} formăm lista vecinilor lui i. Aceasta cuprinde toate

nodurile care sunt extremităţi ale muchiilor ce trec prin nodul i. Pentru graful G=(X,U) din figura

următoare, lista vecinilor este:

Observăm că fiecare linie i din listele vecinilor conţine indicii coloanelor pe care se găsesc valori de 1

în linia i a matricei de adiacenţă. Acestă metodă de reprezentare se implementează elegant utilizând alocarea dinamică a memoriei prin intermediul listelor înlănţuite.

6. Reprezentarea grafului ca vector de muchii

Fiecare muchie a grafului poate fi privită ca o înregistrare cu două componente: cele două vârfuri care constituie extremităţile muchiei. Notând aceste extremităţi cu x şi y, putem defini tipul de date TMUCHIE astfel:

typedef struct {

int x,y;

} TMUCHIE;

Graful în ansamblul său, este o mulţime de muchii, adică o mulţime de elemente de tipul TMUCHIE. În

consecinţă, definim graful ca un “vector de muchii”, adică un vector cu elemente de tipul TMUCHIE: TMUCHIE v[M];

Numărul real de elemente este numărul de muchii m. Astfel, elementele efectiv folosite ale vectorului

vor fi v[1],v[2],….,v[m]. Fiecare element v[i] este de tipul TMUCHIE şi reprezintă o muchie a

grafului, având două componente: v[i].x şi v[i].y care sunt vârfurile extremităţi ale muchiei.

Observaţii: în structura TMUCHIE se pot memora şi alte informaţii referitoare la muchiile grafului (de

exemplu, costul muchiei).

nodul lista vecinilor

1 2,3,4

2 1,3

3 1,2

4 1

Page 8: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

8

Funcţia următoare realizează construirea vectorului muchiilor prin citirea acestora dintr-un fişier text. void citire(TMUCHIE v[M],int &n,int &m)

ifstream f(".....");

int k;

f>>n>>m;

for(k=1;k=m;k++) f>>v[k].x>>v[k].y;

f.close();

7. Matricea costurilor

Această metodă se foloseşte pentru reprezentarea grafurilor ponderate, adică grafuri care au

ataşate muchiilor valori strict pozitive numite ponderi sau costuri. Spre exemplu, dacă graful modelează reţeaua de căi ferate dintr-o regiune, costul pot reprezenta distanţa dintre două localităţi legate prin cale ferată.

Datorită specificului unor probleme practice, acest mod de memorare a grafului poate căpăta două aspecte, după cum trebuie determinat minimul sau maximul unei anumite mărimi asociate muchiilor (cost, durată, timp, distanţă etc.). A) Matricea costurilor, forma 1: este folosită în cazul în care se doreşte determinarea unui drum de lungime minimă între două vârfuri oarecare şi se defineşte astfel:

c, dacă există o muchie de cost c>0 între nodurile i şi j, ij a[i][j]= 0, dacă i=j

, dacă nu există muchie între vârfurile i şi j, ij

Este evidentă necesitatea ataşării unei valori cât mai mari unei muchii ce de fapt nu există, deoarece, căutându-se un drum de lungime minimă, în acest mod se evită selectarea, la un moment dat, a respectivei muchii. În practică, în scrierea unui program se alege cea mai mare valoare ce se poate reprezenta în calculator.

B) Matricea costurilor, forma 2: este folosită în cazul când se doreşte determinarea unui drum de lungime maximă între două noduri şi se defineşte astfel:

c, dacă există o muchie de cost c>0 între nodurile i şi j, ij a[i][j]= 0, dacă i=j

-, dacă nu există muchie între vârfurile i şi j, ij

De data aceasta, din considerente similare, se alege cea mai mică valoare ce se poate reprezenta în calculator.

Pentru graful următor, matricea costurilor în forma 1 are configuraţia:

Page 9: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

9

Următoarea funcţie construieşte matricea costurilor în forma 1 prin citirea datelor dintr-un fişier text. Pentru fiecare muchie din graf se specifică pe o linie din fişier extremităţile şi costul. void citire(int a[N][N],int &n,int &m)

int k,x,y;

ifstream f(".....");

f>>n; //numarul de varfuri

for(x=1;x=n;x++) //initializam matricea costrurilor cu ∞

for(y=1;y=n;y++) a[x][y]=INF; a[x][x]=0; //pe diagonala principala

while(!f.eof())

f>>x>>y>>k;

//extremitatile unei muchii si costul

a[x][y]=a[y][x]=k;

f.close();

8. Afişarea muchiilor unui graf neorientat În multe aplicaţii este necesară afişarea sau numărarea muchiilor unui graf pornind de la o anumită formă de reprezentare construită în memorie. Dacă graful este reprezentat prin matricea de adiacenţă (care este simetrică), atunci muchiile distincte din graf se găsesc în jumătatea superioară a matricii şi trebuie inspectate doar n(n-1)/2

elemente. Funcţia următoare afişează şi numără muchiile unui graf neorientat reprezentat prin matricea de adiacenţă. int scrie_adiacenta(tip a[N][N],int n)

{

int k=0,i,j;

for(i=1;i<=n-1;i++)

for(j=i+1;j<=n;j++)

if(a[i][j]) //exista muchia in graf

{

cout<<“[“<<i<<”,“<<j<<”] “; k++;

x1 x2 x3 x4 x5

x1 0 12 ∞ 7 ∞

x2 12 0 5 ∞ 8

x3 ∞ 5 0 9 15

x4 7 ∞ 9 0 ∞

x5 ∞ 8 15 ∞ 0

Page 10: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

10

}

cout<<endl; return k;

}

Dacă graful este reprezentat prin matricea de incidenţă trebuie inspectate toate cele n*m elemente, parcurgerea făcându-se pe coloane. În fiecare coloană există exact două valori nenule corespunzătoare extremităţilor muchiei. Funcţia următoare afişează muchiile unui graf reprezentat prin matricea de incidenţă. int scrie_adiacenta(tip a[N][M],int n,int m)

{

int i,j;

for(j=1;j<=m;j++) //pe colane

cout<<“[“;

for(i=1;i<=n;i++)

if(a[i][j]) //i este incident cu muchia j

cout<<i;

cout<<“]”<<endl;

}

Dacă graful este reprezentat prin matricea costurilor (care este simetrică), trebuie examinate elementele de deasupra diagonalei principale (în număr de n(n-1)/2). Muchiile corespund

elementelor a[i][j]∞ (forma 1) sau a[i][j]0 (forma 2). Funcţia următoare afişează şi numără

muchiile unui graf neorientat reorezentat prin matricea costurilor în prima formă. int scrie_costuri(int a[N][N],int n)

int i,j,k=0;

for(i=1;in;i++)

for(j=i+1;j=n;j++)

if(a[i][j]INF)

cout<<“[“<<i<<”,“<<j<<”] “; k++; cout<<endl; return k;

9. Determinarea gradelor vârfurilor unui graf neorientat Gradul unui vârf reprezintă numărul muchiilor incidente cu vârful respectiv. În cazul în care graful este reprezentat prin matricea de adiacenţă, gradul unui vârf este suma elementelor de pe linia sau de pe coloana (matricea este simetrică) corespunzătoare nodului respectiv. Funcţia următoare determină gradul unui nod x folosind matricea de adiacenţă şi însumând elementele din linia x:

int grad(tip a[N][N],int n,int x)

int j,k=0;

for(j=1;j=n;j++) k+=a[x][j]; //suma pe linia x return k;

Page 11: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

11

Dacă graful este reprezentat prin matricea de incidenţă, gradul se calculează ca suma elementelor de pe linia corespunzătoare nodului respectiv. Funcţia următoare foloseşte matricea de incidenţă şi calculează gradul nodului x ca suma elementelor din linia x:

int grad(tip a[N][M],int m,int x)

int j,k=0;

for(j=1;j=m;j++) k+=a[x][j]; //suma pe linia x return k;

Dacă graful este reprezentat prin matricea costurilor, gradul unui vârf se determină prin

numărarea elementelor a[i][j]∞ (sau a[i][j]0) din linia sau din coloana (matricea este

simetrică) corespunzătoare vârfului respectiv. Funcţia următoare numără valorile ∞ din linia x din

matricea costurilor: int grad(int a[N][N],int n,int x)

int j,k=0;

for(j=1;j=n;j++)

if(a[x][j]INF) k++; //suma pe linia x return k;

10. Noţiunile de graf parţial şi subgraf

Definiţie: Fie graful G=(X,U). Un graf parţial al lui G, este un graf G1=(X,V), cu VU. Astfel spus,

un graf parţial G1 al lui G, este chiar G, sau se obţine din G păstrând toate vârfurile şi suprimând nişte

muchii. Exemplu: Pentru graful G=(X,U) de mai jos, construim alăturat graful parţial obţinut prin eliminarea

muchiilor ce trec prin vârful 4. Graful parţial obţinut este G1=(X,V), unde X={1,2,3,4,5,6,7}, iar

V={u1,u2,u5}. S-au eliminat muchiile u3 şi u4 care trec prin nodul 4.

Page 12: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

12

Definiţie: Fie graful G=(X,U). Un subgraf al lui G, este un graf G1=(Y,T), unde YX şi TU, iar T

va conţine numai muchiile care au ambele extremităţi în Y. Astfel spus, un subgraf G1 al lui G, se

obţine din G eliminând nişte vârfuri şi toate muchiile incidente cu aceste vârfuri eliminate.

Exemplu: Pentru graful G=(X,U) de mai sus, construim subgraful obţinut prin eliminarea vârfurilor 1

şi 6 , respectiv prin eliminarea muchiilor u1 şi u5 incidente cu aceste vârfuri.

Propoziţie: Numărul grafurilor parţiale care se pot construi dintr-un graf neorientat cu n vârfuri şi m

muchii este 2m.

Demonstraţia acestei afirmaţii se bazează pe definiţia grafului parţial: eliminăm muchii din graful iniţial. Astfel, C0m reprezintă numărul de moduri în care putem şterge zero muchii din graful iniţial

(obţinem graful identic), C1m reprezintă numărul de moduri în care putem şterge o muchie din graful

iniţial, C2m reprezintă numărul de moduri în care putem şterge două muchii din graful iniţial,....., Cmm

reprezintă numărul de moduri în care putem şterge toate cele m muchii din graful iniţial (obţinem un graf format din n vârfuri izolate). În total sunt C0m+ C

1m+----+ C

mm=2

m moduri de a şterge muchii din

graful iniţial, deci se pot obţine 2m grafuri parţiale.

Propoziţie:Numărul subgrafurilor care se pot obţine dintr-un graf neorientat cu n vârfuri este 2n-1.

Demonstraţia acestei propoziţii se bazează pe definiţia subgrafului: eliminăm vârfuri din graful iniţial. Putem elimina minim zero vârfuri (şi obţinem graful identic) şi maxim n-1 vârfuri. Nu putem elimina toate vârfurile deoarece mulţimea vârfurilor unui graf, conform definiţiei, este finită şi nevidă. Numărul modalităţilor de a elimina vârfuri este C0n+ C1n+----+ Cn-1n=2

n-1,deci numărul

subgrafurilor care se pot obţine este 2n-1.

Page 13: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

13

11. Graf complet şi graf bipartit

Definiţie: Se numeşte graf complet cu n vârfuri, notat kn, un graf G=(X,U) cu proprietatea că

oricare două vârfuri sunt adiacente, adică () x,y X () muchia [x,y]U.

Exemplu: K5

Teoremă: Un graf complet cu n vârfuri are n*(n-1)/2 muchii.

Demonstraţia este evidentă: cu n vârfuri se pot forma n(n-1)/2 perechi de vârfuri şi oricare

două vârfuri sunt adiacente. Observaţie: Toate vârfurile unui graf complet Kn au gradul n-1, deci este un graf (n-1)-regulat.

Definiţie: Se numeşte graf bipartit, un graf G=(X,U) cu proprietatea că există două mulţimi A şi B

incluse în X, astfel încât:

A B = ,A B =X

toate muchiile grafului au o extremitate în mulţimea A şi cealaltă extremitate în mulţimea B

Exemplu: Fie G=(X,U), unde X={1,2,3,4,5,6,7}, U={u1,u2,u3,u4}. Cu mulţimile A={1,2,3}

şi B={4,5,6,7} generăm graful bipartit alăturat. Se observă că A B = şi A B =X, iar

fiecare muchie are o extremitate în A şi o extremitate în B.

Page 14: REPREZENTAREA GRAFURILOR NEORIENTATE · pentru grafuri neorientate termenii de vârf şi muchie pentru grafurile orientate termenii de nod şi arc Dacă o muchie trece prin nodurile

Informatica clasa a XI-a

14

Definiţie: Se numeşte graf bipartit complet, un graf bipartit cu proprietatea că pentru orice

vârf x din mulţimea A şi orice vârf y din mulţimea B, există muchia (x,y) (unde A şi B sunt cele două

mulţimi care partiţionează mulţimea vârfurilor X). Dacă mulţimea A are p elemente, iar mulţimea B are

q elemente, un graf bipartit complet se mai notează cu Kp,q.

Teoremă: Un graf bipartit complet Kp,q are p*q muchii.

Exemplu: Un graf bipartit complet K2,3

Propoziţie: Numărul total de grafuri bipartite complete care se pot construi cu n vârfuri este 2n-1-1.

Pentru a demonstra această afirmaţie plecăm de la observaţia că un graf bipartit complet este unic determinat de o partiţie a lui X în două mulţimi A şi B

disjuncte şi nevide. A determina toate grafurile bipartite complete, înseamnă a determina în câte moduri se pot construi mulţimile A şi B. Pentru acesta procedăm astfel: în mulţimea A punem vârful 1

pentru a nu repeta soluţiile. Apoi: la A se adaugă zero vârfuri (sunt C0n-1 situaţii) şi în B restul, în A se

adaugă un vârf (sunt C1n-1 situaţii) şi în B restul, în A se adaugă două vârfuri (sunt C2n-1 situaţii) şi în B

restul, ...., în A se adaugă n-2 vârfuri (sunt Cn-2n-1 situaţii) şi în B restul. Altă situaţie nu există pentru

că la A nu se pot adăuga n-1 vârfuri (B ar fi mulţimea vidă).

În total sunt C0n-1+C1n-1+C

2n-1+...C

n-2n-1=2

n-1-Cn-1n-1=2n-1-1.