Sunteți pe pagina 1din 14

Informatica clasa a XI-a

1



REPREZENTAREA GRAFURILOR NEORIENTATE





1. Noiunea 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. Afiarea muchiilor unui graf neorientat ................................................................. 9
9. Determinarea gradelor vrfurilor unui graf neorientat ..................................... 10
10. Noiunile de graf parial i subgraf ..................................................................... 11
11. Graf complet i graf bipartit ................................................................................ 13
Informatica clasa a XI-a

2
1. Noiunea de graf neorientat

Definiie: Se numete graf neorientat o pereche ordonat de mulimi (X,U), unde:
- X este o mulime finit i nevid de elemente numite vrfuri sau noduri
- U este o mulime de perechi neordonate de cte dou elemente din X, numite muchii sau arce
Un graf neorientat poate fi reprezentat sub forma unei figuri geometrice alctuit din puncte
(vrfuri,noduri) i linii drepte sau curbe care unesc aceste puncte (muchii, arce). Respectnd o
anumit tradiie pe care o regsim n literatura de specialitate, vom folosi:
- pentru grafuri neorientate termenii de vrf 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 alturat avem:




- X={1,2,3,4,5,6,7} mulimea vrfurilor
- U={u1,u2,u3,u4,5} mulimea 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),notm:
- mnumrul muchiilor
- nnumrul vrfurilor
- X={x
1
,x
2
,.,x
n
}mulimea vrfurilor
- U={u
1
,u
2
,u
m
}mulimea muchiilor
- muchia u
k
este o pereche neordonat (a,b) alctuit din dou elemente din X

Pentru o muchie u
k
=(a,b), vom spune c:
- vrfurile a i b sunt adiacente i se numesc extremitile muchiei u
k

- muchia u
k
i vrful a, respectiv vrful b , sunt incidente n graf
- muchia (a,b) este totuna cu muchia (b,a) (nu exist o orientare a muchiei)

Definiie: Gradul unui vrf x, notat d(x), reprezint numrul muchiilor care trec prin nodul x
(incidente cu nodul x).

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 vrf care are gradul 0, se numete vrf izolat (de exemplu, vrful 7).
- Un vrf care are gradul 1, se numete vrf terminal (de exemplu, vrfurile 5 i 6).

Teorem: ntr-un graf G=(X,U) cu n vrfuri i m muchii, suma gradelor tuturor vrfurilor este egal
cu 2*numrul muchiilor:

m x d x d x d x d
n
n
i
i
* 2 ) ( ........ ) ( ) ( ) (
2 1
1
= + + =

=

Demonstraia este evident. Fiecare muchie de forma [x
i
,x
j
] contribuie cu o unitate la gradul
vrfului i i cu o unitate la gradul vrfului j. Aadar fiecare muchie adaug dou uniti la suma
gradelor. Fiind m muchii, rezult c suma gradelor este 2m.

Consecin: n orice graf neorientat G=(X,U) exist un numr par de vrfuri cu grad impar.

Definiie: Se numete un graf regulat un graf n care toate vrfurile au acelai grad. Dac gradul
este k, graful se numete k-regulat.

Exemplu: Graful urmtor este un graf 3-regulat (toate vrfurile au gradul 3).




Definiie : Fiind dat un ir D=(d
1
,d
2
,..,d
n
) format din n numere ntregi pozitive, el se numete ir
grafic dac exist un graf neorientat ale crui vrfuri s aib drept grade numerele date. Evident,
condiiile necesare pentru ca irul D s fie ir grafic sunt:
a) 0<d
i
sn-1, () ie{1,2....n}
b) d
1
+d
2
+.......+d
n
=2*k (numr par)









Informatica clasa a XI-a

4
2. Reprezentarea grafurilor neorientate

Considerm un graf neorientat G=(X,U) cu m muchii i n vrfuri 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 implementrile acestor metode de reprezentare vom considera definiiile globale de
constante i tipuri urmtoare:

#define N 50 //numrul de vrfuri
#define M 100 //numrul de muchii
#define INF 32000
typedef unsigned char tip;


3. Matricea de adiacen

Este o matrice ptratic binar A
nxn
n care un element a
ij
este definit astfel:


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

Exemplu: pentru graful urmtor, matricea de adiacen este:



Elementul a[2][3] (de pe linia 2 i coloana 3) va fi 1, ntruct 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,je{1,2,..,n} , cu i=j, 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

Informatica clasa a XI-a

5
Observaii
Suma elementelor de pe linia x sau de pe coloana x din matricea de adiacen reprezint
gradul nodului x.
Muchiile distincte din graf se regsesc n jumtatea superioar a matricei de adiacen.
Suma tuturor valorilor din matricea de adiacen este numr par egal cu de dou ori numrul
muchiilor din graf.

Pentru memorarea n programe a matricei de adiacen se folosesc matrici ptratice binare.
Uzual, dintr-un fiier text se citesc numrul vrfurilor i, eventual, cel al muchiilor, apoi perechi de
valori diferite de vrfuri din graf reprezentnd extremitile unei muchii. Din fiecare pereche citit,
dou valori din matricea de adiacen (valori simetrice) primesc valoarea 1.
Funcia urmtoare citete dintr-un fiier text informaiile referitoare la un graf n forma descris
mai sus i construiete 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 numrul muchiilor din graf, funcia de citire se modific n felul urmtor:

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 fiier este memorat integral matricea de adiacen, citirea se face element cu element ca n
funcia urmtoare:

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();
}
Informatica clasa a XI-a

6
4. Matricea de inciden

Pentru graful G=(X,U) cu n vrfuri i m muchii, matricea de inciden a are n linii i m coloane
i se definete astfel:
1, dac vrful x
i
este incident cu muchia m
j

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

Exemplu: Fie graful G=(X,U) din figura alturat 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 fiecruia dintre vrfuri cte o linie a matricei i fiecrei muchii cte o
coloan, se obine matricea de inciden:

u
1
u
2
u
3
u
4
u
5
u
6
u
7
u
8
u
9
u
10

x
1
1 1 1 1 1 0 0 0 0 0
x
2
1 0 0 0 0 1 0 0 0 0
x
3
0 1 0 0 0 0 1 1 0 0
x
4
0 0 1 0 0 1 0 0 1 0
x
5
0 0 0 1 0 0 1 0 1 1
x
6
0 0 0 0 1 0 0 1 0 1

Observaii:
Fiecare coloan din matricea de inciden conine 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 numr par (de dou ori numrul
muchiilor).

Pentru memorarea n programe a matricei de adiacen se folosesc matrici binare A
nxm
.
Matricea de inciden se poate construi prin citirea muchiilor dintr-un fiier text. Muchiile se vor
numerota n ordinea citirii din fiier i fiecare muchie este incident cu extremitile ei.
Funcia urmtoare ilustreaz modul de construire a matricii de inciden prin citirea
informaiilor dintr-un fiier text.

void citire(tip a[N][M],int &n,int &m)
{
int k,x,y;
ifstream f(".....");
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 ie{1,2,,n} formm lista vecinilor lui i. Aceasta cuprinde toate
nodurile care sunt extremiti ale muchiilor ce trec prin nodul i. Pentru graful G=(X,U) din figura
urmtoare, lista vecinilor este:



Observm c fiecare linie i din listele vecinilor conine indicii coloanelor pe care se gsesc valori de 1
n linia i a matricei de adiacen. Acest metod de reprezentare se implementeaz elegant utiliznd
alocarea dinamic a memoriei prin intermediul listelor nlnuite.

6. Reprezentarea grafului ca vector de muchii

Fiecare muchie a grafului poate fi privit ca o nregistrare cu dou componente: cele dou
vrfuri care constituie extremitile muchiei. Notnd aceste extremiti cu x i y, putem defini tipul de
date TMUCHIE astfel:
typedef struct {
int x,y;
} TMUCHIE;
Graful n ansamblul su, este o mulime de muchii, adic o mulime 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];
Numrul real de elemente este numrul 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, avnd dou componente: v[i].x i v[i].y care sunt vrfurile extremiti ale muchiei.

Observaii: n structura TMUCHIE se pot memora i alte informaii referitoare la muchiile grafului (de
exemplu, costul muchiei).

nodul lista vecinilor
1 2,3,4
2 1,3
3 1,2
4 1

Informatica clasa a XI-a

8
Funcia urmtoare realizeaz construirea vectorului muchiilor prin citirea acestora dintr-un
fiier 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 folosete pentru reprezentarea grafurilor ponderate, adic grafuri care au
ataate muchiilor valori strict pozitive numite ponderi sau costuri. Spre exemplu, dac graful
modeleaz reeaua de ci ferate dintr-o regiune, costul pot reprezenta distana dintre dou localiti
legate prin cale ferat.
Datorit specificului unor probleme practice, acest mod de memorare a grafului poate cpta
dou aspecte, dup cum trebuie determinat minimul sau maximul unei anumite mrimi asociate
muchiilor (cost, durat, timp, distan etc.).

A) Matricea costurilor, forma 1: este folosit n cazul n care se dorete determinarea unui drum de
lungime minim ntre dou vrfuri oarecare i se definete astfel:

c, dac exist o muchie de cost c>0 ntre nodurile i i j, i=j
a[i][j]= 0, dac i=j
, dac nu exist muchie ntre vrfurile i i j, i=j

Este evident necesitatea atarii unei valori ct mai mari unei muchii ce de fapt nu exist,
deoarece, cutndu-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 cnd se dorete determinarea unui drum de
lungime maxim ntre dou noduri i se definete astfel:

c, dac exist o muchie de cost c>0 ntre nodurile i i j, i=j
a[i][j]= 0, dac i=j
-, dac nu exist muchie ntre vrfurile i i j, i=j

De data aceasta, din considerente similare, se alege cea mai mic valoare ce se poate
reprezenta n calculator.
Pentru graful urmtor, matricea costurilor n forma 1 are configuraia:

Informatica clasa a XI-a

9


Urmtoarea funcie construiete matricea costurilor n forma 1 prin citirea datelor dintr-un fiier text.
Pentru fiecare muchie din graf se specific pe o linie din fiier extremitile 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. Afiarea muchiilor unui graf neorientat

n multe aplicaii este necesar afiarea sau numrarea 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 gsesc n jumtatea superioar a matricii i trebuie inspectate doar n(n-1)/2
elemente. Funcia urmtoare afieaz i numr 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++;
x
1
x
2
x
3
x
4
x
5

x
1
0 12 7
x
2
12 0 5 8
x
3
5 0 9 15
x
4
7 9 0
x
5
8 15 0

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 fcndu-se pe coloane. n fiecare coloan exist exact dou valori nenule
corespunztoare extremitilor muchiei. Funcia urmtoare afieaz 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 numr de n(n-1)/2). Muchiile corespund
elementelor a[i][j]< (forma 1) sau a[i][j]>0 (forma 2). Funcia urmtoare afieaz i numr
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;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i][j]<INF)
{ cout<<[<<i<<,<<j<<] ; k++; }
cout<<endl; return k;
}

9. Determinarea gradelor vrfurilor unui graf neorientat

Gradul unui vrf reprezint numrul muchiilor incidente cu vrful respectiv. n cazul n care
graful este reprezentat prin matricea de adiacen, gradul unui vrf este suma elementelor de pe linia
sau de pe coloana (matricea este simetric) corespunztoare nodului respectiv. Funcia urmtoare
determin gradul unui nod x folosind matricea de adiacen i nsumnd 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;
}

Informatica clasa a XI-a

11
Dac graful este reprezentat prin matricea de inciden, gradul se calculeaz ca suma
elementelor de pe linia corespunztoare nodului respectiv. Funcia urmtoare folosete 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 vrf se determin prin
numrarea elementelor a[i][j]< (sau a[i][j]>0) din linia sau din coloana (matricea este
simetric) corespunztoare vrfului respectiv. Funcia urmtoare numr 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. Noiunile de graf parial i subgraf

Definiie: Fie graful G=(X,U). Un graf parial al lui G, este un graf G
1
=(X,V), cu V_U. Astfel spus,
un graf parial G
1
al lui G, este chiar G, sau se obine din G pstrnd toate vrfurile i suprimnd nite
muchii.

Exemplu: Pentru graful G=(X,U) de mai jos, construim alturat graful parial obinut prin eliminarea
muchiilor ce trec prin vrful 4. Graful parial obinut este G
1
=(X,V), unde X={1,2,3,4,5,6,7}, iar
V={u
1
,u
2
,u
5
}. S-au eliminat muchiile u
3
i u
4
care trec prin nodul 4.




Informatica clasa a XI-a

12
Definiie: Fie graful G=(X,U). Un subgraf al lui G, este un graf G
1
=(Y,T), unde YcX i TcU, iar T
va conine numai muchiile care au ambele extremiti n Y. Astfel spus, un subgraf G
1
al lui G, se
obine din G eliminnd nite vrfuri i toate muchiile incidente cu aceste vrfuri eliminate.

Exemplu: Pentru graful G=(X,U) de mai sus, construim subgraful obinut prin eliminarea vrfurilor 1
i 6 , respectiv prin eliminarea muchiilor u
1
i u
5
incidente cu aceste vrfuri.






Propoziie: Numrul grafurilor pariale care se pot construi dintr-un graf neorientat cu n vrfuri i m
muchii este 2
m
.
Demonstraia acestei afirmaii se bazeaz pe definiia grafului parial: eliminm muchii din
graful iniial. Astfel, C
0
m
reprezint numrul de moduri n care putem terge zero muchii din graful iniial
(obinem graful identic), C
1
m
reprezint numrul de moduri n care putem terge o muchie din graful
iniial, C
2
m
reprezint numrul de moduri n care putem terge dou muchii din graful iniial,....., C
m
m

reprezint numrul de moduri n care putem terge toate cele m muchii din graful iniial (obinem un
graf format din n vrfuri izolate). n total sunt C
0
m
+ C
1
m
+----+ C
m
m
=2
m
moduri de a terge muchii din
graful iniial, deci se pot obine 2
m
grafuri pariale.

Propoziie:Numrul subgrafurilor care se pot obine dintr-un graf neorientat cu n vrfuri este 2
n
-1.
Demonstraia acestei propoziii se bazeaz pe definiia subgrafului: eliminm vrfuri din graful
iniial. Putem elimina minim zero vrfuri (i obinem graful identic) i maxim n-1 vrfuri. Nu putem
elimina toate vrfurile deoarece mulimea vrfurilor unui graf, conform definiiei, este finit i nevid.
Numrul modalitilor de a elimina vrfuri este C
0
n
+ C
1
n
+----+ C
n-1
n
=2
n
-1,deci numrul
subgrafurilor care se pot obine este 2
n
-1.








Informatica clasa a XI-a

13
11. Graf complet i graf bipartit

Definiie: Se numete graf complet cu n vrfuri, notat k
n
, un graf G=(X,U) cu proprietatea c
oricare dou vrfuri sunt adiacente, adic () x,y eX (-) muchia [x,y]eU.

Exemplu: K
5




Teorem: Un graf complet cu n vrfuri are n*(n-1)/2 muchii.
Demonstraia este evident: cu n vrfuri se pot forma n(n-1)/2 perechi de vrfuri i oricare
dou vrfuri sunt adiacente.
Observaie: Toate vrfurile unui graf complet K
n
au gradul n-1, deci este un graf (n-1)-regulat.



Definiie: Se numete graf bipartit, un graf G=(X,U) cu proprietatea c exist dou mulimi A i B
incluse n X, astfel nct:
- A B = C,A B =X
- toate muchiile grafului au o extremitate n mulimea A i cealalt extremitate n mulimea B

Exemplu: Fie G=(X,U), unde X={1,2,3,4,5,6,7}, U={u
1
,u
2
,u
3
,u
4
}. Cu mulimile A={1,2,3}
i B={4,5,6,7} generm graful bipartit alturat. Se observ c A B = C i A B =X, iar
fiecare muchie are o extremitate n A i o extremitate n B.


Informatica clasa a XI-a

14

Definiie: Se numete graf bipartit complet, un graf bipartit cu proprietatea c pentru orice
vrf x din mulimea A i orice vrf y din mulimea B, exist muchia (x,y) (unde A i B sunt cele dou
mulimi care partiioneaz mulimea vrfurilor X). Dac mulimea A are p elemente, iar mulimea B are
q elemente, un graf bipartit complet se mai noteaz cu K
p,q
.

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

Exemplu: Un graf bipartit complet K
2,3





Propoziie: Numrul total de grafuri bipartite complete care se pot
construi cu n vrfuri este 2
n-1
-1.
Pentru a demonstra aceast afirmaie plecm de la
observaia c un graf bipartit complet este unic determinat de o partiie a lui X n dou mulimi A i B
disjuncte i nevide. A determina toate grafurile bipartite complete, nseamn a determina n cte
moduri se pot construi mulimile A i B. Pentru acesta procedm astfel: n mulimea A punem vrful 1
pentru a nu repeta soluiile. Apoi: la A se adaug zero vrfuri (sunt C
0
n-1
situaii) i n B restul, n A se
adaug un vrf (sunt C
1
n-1
situaii) i n B restul, n A se adaug dou vrfuri (sunt C
2
n-1
situaii) i n B
restul, ...., n A se adaug n-2 vrfuri (sunt C
n-2
n-1
situaii) i n B restul. Alt situaie nu exist pentru
c la A nu se pot aduga n-1 vrfuri (B ar fi mulimea vid).
n total sunt C
0
n-1
+C
1
n-1
+C
2
n-1
+...C
n-2
n-1
=2
n-1
-C
n-1
n-1
=2
n-1
-1.

S-ar putea să vă placă și