1. Grafuri neorientate
Definiţie: Un graf neorientat este o pereche ordonată de mulţimi, notat G - (X,U), X diferită de
mulţimea vidă, este o mulţime finită -> mulţimea nodurilor (vârfurilor), U mulţimea muchiilor.
U={[x,y]| x,y aparţin X}
Definiţie: [x,y] se numesc muchie a grafului, x şi y sunt vârfuri adiacente, muchia este
incidenta vârfurilor.
Convenţie:
n = numărul nodurilor |X|=n
m = numărul muchilor |U|=m
X={x1,x2, … xn} X={1,2,3, .. n}
2 6
1
4 5 7
3 8
1 1
9 0 1
0 0
X={1,2,3,…11}
U={[1,2], [1,3], [1,4], [2,4], [3,4], [4,5], [5,6], [5,7], [5,8], [9,10]}
Definiţie: Graf parţial pentru graful G=(X,U), este un graf G1=(X,v), V inclusă în U
Ex.
G1: V={[1,2], [1,3], [1,4], [2,4], [3,4], [4,5], [5,6], [5,7], [5,8]}
G1: V= mulţime vid ă
G1: V=U
Definiţie: Subgraf pentru graful G=(X,U), un graf H=(Y,W) unde Y este inclus în X iar W este
mulţimea muchiilor induse de vârfurile din Y (W inclus în U)
Ex:
H=(Y,W)
Y={1,2,3,4,7}
W={[1,2], [1,3], [1,4], [2,4], [3,4]}
Y={2,4,5,9}
W={[2,4], [4,5]}
Temă: Fie graful G=(X,U), unde X={1,2,3,4} iar U={[1,2], [1,3], [1,4]} Câte grafuri parţiale
se pot construi?
Definiţie: Un graf complet este un graf neorientat în care oricare două vârfuri sunt adiacente.
Construiesc funcţie
F: A → {0,1}
F(muchie)= 0 => muchia nu a fost aleasă
F(muchie)= 1 => muchia a fost aleasă
Numărul grafurilor neorientate este egal cu numărul funcţiilor F
F -> 2n*(n-1)/2
N=4 câte grafuri neorientate: 6 muchii în graful complet cu 4 vârfuri -> 26 = 64 grafuri
1
4
2
5
3
|A| = p noduri
|B| = q noduri
Graful bipartit complet se notează Kpq
-nr. de muchii m=p*q
Definiţie : Graful neorientat G=(X,U), Gradul vârfului = numărul muchiilor incidente vârfului
respectiv
2 6
1
4 5 7
3 8
1 1
9 0 1
0 0
Observaţii
1. d[x]=1 => vârful x este vârf terminal
2. d[x]=0 => vârful x este izolat
3. Σ d[x] = număr par = 2*m – fiecare muchie [x,y] aduce +1 pentru vârful x şi +1 pentru vârful
4. d[x]<n pentru că d[x]=n-1 maximul gradelor într-un graf cu n noduri
5. Graf complet d[x]=n-1 oricare ar fi vârful x, pentru că x este unit cu toate n-1 vârfuri
6. Suma gradelor impare este un număr par.
Exerciţiu:
Secvenţa {5, 3, 0, 3, 1, 4 } poate fi secvenţa gradelor vârfurilor unui graf? NU d[1]=5 (unit cu toate
vârfurile), d[3]=0 fără legături
Definiţie: Graf neorientat G=(X,U), lanţ ca fiind o succesiune L={x1,x2, ... xk} de vârfuri în care
orice două vârfuri de pe poziţii consecutive sunt legate printr-o muchie.
Ex.
L1=[1, 2, 4, 5, 8] => lanţ, are vârfuri distincte două câte două
L2=[1, 2, 3, 4, 5] => nu este lanţ [2,3] nu este muchie
L3=[5, 4, 3, 1, 2, 4] => lanţ, are vârfuri care se repetă, dar foloseşte muchii distincte
L4=[1, 2, 1, 3, 4] => lanţ, are vârfuri care se repetă şi foloseşte muchia [1,2] de mai multe ori
Observaţii
Definiţie : Graf neorientat G=(U,X), ciclu, o secvenţă de noduri C=[x1, x2, ... xk, x1] în care
primul şi ultimul nod sunt identice. Un ciclu foloseşte muchii distincte.
2 6
1
4 5 7
3 8
9 10 11
C1=[1, 2, 3, 1] => ciclu, în afară de primul şi ultimul, celelalte vârfuti sunt distincte
C2=[4, 5, 6, 7, 5] => nu este ciclu
C3=[2, 3, 1, 2] => ciclu C1=C3
C4=[4, 2, 1, 3, 4] => ciclu
C5=[5, 4, 3, 5, 6, 7, 5] => ciclu, există vârfuri care se repetă în afară de primul şi ultimul
Observaţii
- ciclu elementar: în afară de primul şi ultimul, celelalte vârfuri sunt distincte
- ciclu neelementar : există vârfuri care se repetă în afară de primul şi ultimul
- cicluri egale : subgrafurile generate de vârfurile ciclului sunt identice
- numărul de muchii = lungimea ciclului
Definiţie: G=(X,U) graf neorientat, G este conex între orice două vârfuri există un lanţ
Definiţie: G=(X,U) nu este conex, atunci este alcătuit din componente conexe, componenta conexă
fiind un subgraf maximal în raport cu proprietatea de conexitate.
Exemplu:
- figură: 3 componente conexe: {1, 2, 3, 4, 5, 6, 7, 8}, {9, 10}, {11}
- vârful izolat este o componentă conexă a grafului
Exerciţiu
1. Graf neorientat cu n=15 noduri şi m=12 muchii. Care este numărul maxim de componente
conexe pe care le poate avea?
9 vârfuri izolate (7, 8, 9, ... 15) + 1 element conex (1, 2, 3, ... 6) =10 elemente conexe
(Maxim)
Definiţie: G=(X,U) graf neorientat este graf hamiltonian există un ciclu hamiltonian în graf,
ciclu elementar care trece prin toate nodurule.
Definiţie: G=(X,U) graf neorientat este graf eulerian un ciclu eulerian, un ciclu eulerian este un
ciclu care cuprinde toate muchiile.
011011
100011
100101
001010
110101
111010
Observaţii :
- matrice pătratică cu n linii şi n coloane
- matrice simetrică faţă de diagonala principală a[i][j]=a[j][i]
- suma valorilor de 1 de pe linia i (sau a valorilor 1 de pe coloana i) => gradul vârfului i
- descrierea muchiilor grafului
for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
if(a[i][j]==1) cout<<”[“<<i<<”,”<<j<<”]”;
- a[i][i]=0 => graful nu are bucle
Exemplu
Matricea de adiacenţă oebtru un graf complet cu 5 noduri
01111
10111
11011
11101
11110
Observaţii:
- numărul de noduri din lista vârfului reprezintă gradul vârfului
- reprezentare statică, matrice cu număr variat de coloane
- reprezentare dinamică
typedef struct nod
{ int v;
struct nod *adr;
}*pNod;
3. Vector de muchii
typedef struct
{
int x,y ;
} Muchie;
Probleme
1. G=(X,U), n=nr de noduri, m=nr de muchii
m>(n-1)*(n-2)/2
G nu are varfuri izolate
Solutie
- prin reducere la absurd
Presupunem ca exista X varf izolat => celelalte n-1 noduri formeaza graf complet
m=(n-1)(n-2)/2 Contradictie!!!
G nu are bvarfuri izolate
2. Oricare ar fi G=(X,U) cu n>=2 varfuri, contine cel putin doua varfuri cu acelasi grad
Presupunem prin reducere la absurd:
Oricare doua varfuri au grade diferite
n noduri
n valori distincte, cea mai mare n-1
sirul 0, 1, 2, ... n-1 = sirul gradelor
exista 1 varf izolat si un varf legat de toate: Contradictie!
Exista cel putin 2 varfuri cu acelasi grad!
PARCURGEREA GRAFURILOR
6 1
5
2
4 3
-vp=5
5 4 3 1 6 2
Observaţii :
- se foloseşte pentru prelucrare o coadă: p,u (First In, First, Out)
- p=1, u=0 => coadă vidă (u-p+1=0)
- parcurgerea se realizează while(p<=u)
2. Parcurgerea în adâncime (Depth First – DF)
6 1
5
2
4 3
foloseşte stivă
5
4 4 6
2 3 3 3 3
1 1 1 1 1 1 1
1, 2, 3, 4, 5, 6
GRAFURI HAMILOTNIENE
Definiţie: G=(X,U) graf neorientat este graf hamiltonian există un ciclu hamiltonian în graf,
ciclu elementar care trece prin toate nodurule.
Teoremă: pentru G=(X,U) graf neorientat, cu n noduri (n>=3) dacă oricare ar fi x d[x]>=n/2 atunci
graful conţine un ciclu hamiltonian.
Reciproca: Dacă graful conţine un ciclu hamiltonian, nu este neapărat ca d[x]>=n/2
2
5
3
4
Definiţie: G=(X,U) graf neorientat este graf eulerian un ciclu eulerian, un ciclu eulerian este un
ciclu care cuprinde toate muchiile.
Teoremă:
G=(X,U) nu are vârfuri izolate
G eulerian conex şi d[x] număr par oricare ar fi x vârf din X
2 3
1
12 4
10
11
5
1
3
9 6
7
8
D[]={2,2,4,2,2,2,2,2,2,6,2,2,2}
C[]={1,10,2,3,4,5,6,3,7,8,10,9,13,11,10,12,1}
C[]={v1,v2,…vk}
-şterg muchiile folosite
-reactualizez vectorul gradelor
-caut în C un vârf cu gradul diferit de zero
-din vârful respectiv => C[1]={vi,x1,x2,…,xj,vi}
-se inserează ciclul C1 în ciclul C
MATRICEA PONDERILOR
Modalităţi de reprezetare :
- modalităţi de reprezentare a grafurilor.
- Vector de taţi, T[i]=tatăl nodului i, T[răd]=0 ;
Exemplu :
T={3, 4, 0, 3, 3, 5}
1 4 5
2 6
Problemă: Se consideră un şir de valori naturale. Să se verifice dacă există un arbore, cu n voduri
pentru care gradele vârfurilor să fie numerele date.