Documente Academic
Documente Profesional
Documente Cultură
Chisinau 2015
Cuprins
Disciplina: Algoritmica Grafurilor.......................................................................................0
Notiuni introductive............................................................................................................2
Conditii generale.................................................................................................................4
I.
2.1.1
Matricea de adiacenta.........................................................................................12
2.1.2
Matricea de incidenta..........................................................................................12
2.1.3
Matricea Kirchhgoff............................................................................................13
2.2
2.3
2.4
2.5
2.6
2.6.1
2.6.2
2.6.3
c) clicele maximale.............................................................................................16
2.6.4
2.6.5
2.6.6
f) cuplajele maximale..........................................................................................17
0 , 0 , 1 , 1 , . ...............................................................17
2.7
Determinarea numerelor
2.8
Graful 4......................................................................................................................18
3.3
Probleme teoretice.....................................................................................................18
3.3.1
Problema 7..........................................................................................................18
3.3.2
Problema 18........................................................................................................19
IV. Concluzie..........................................................................................................................20
Notiuni introductive
Perechea X ,U , unde X este o mulime nevid de elemente distincte, iar U este o mulime format
din perechi neordonate de elemente din X , se numete graf neorientat.
Vom nota graful neorientat, determinat de perechea de mulimi X ,U , prin G X ;U . Elementele
lui X i U le numim respectiv vrfuri i muchii ale grafului G. Dac
graful este de ordin n .
X n
, atunci se spune c
u
Fie X {x1 , x2 ,..., x n } i U {u1 , u2 ,..., um } . Dac o muchie j este determinat de perechea de
u x k , xl
vrfuri x k , xl , atunci vom scrie j
. n acest caz, x k i xl sunt considerate extremiti ale
muchiei
uj
u
incident muchiei j i reciproc. Adiacena dintre x k , xl se noteaz prin x k ~ xl . Dou muchii se
numesc adiacente, dac sunt incidente unui vrf comun.
O matrice binar
A aij
de dimensiune
nn
1, n cazul cnd xi x j ,
aij
0, n caz contrar.
X k x1 , x 2 ,..., x k
. Prin Lk vom nota familia mulimilor stabile interior maximale n subgraful generat
de mulimea de vrfuri X k , iar prin Yk mulimea tuturor vrfurilor din X k , neadiacente vrfului x k
.
( Yk y k : y nu este adiacent v rfului xk .
Folosind notaiile menionate, toate mulimile stabile interior maximale pot fi gsite cu ajutorul
urmtorului algoritm:
Pasul l. Fixm
1 x1 , L1 x1 , Y1 x1 .
Considerm k 1 .
x2 , dac x1 ~ x2 ,
x1 , x2 , dac x1 , x2 nu sunt adiacente .
Y2
*
Pasul 4. Determinm I k - familia tuturor mulimilor maximale din I k .
*
Pasul 5. Construim familia de mulimi Lk 1 prin examinarea fiecrui element M din Lk :
*
a) dac M Yk 1 , atunci M x k 1 Lk 1 ;
*
b) dac M Yk 1 , atunci M Lk 1 i dac n acest caz se respect i condiia M Yk 1 I k , atunci
*
se mai consider c x k 1 ( M Yk 1 ) Lk 1 .
*
Pasul 6. Determinm Lk 1 - familia tuturor mulimilor maximale din Lk 1 .
Conditii generale
I. Elaborai un program pentru gsirea mulii stabile interior maxime cu algoritmul indicat.
II. Pentru graful G (notai vrfurile grafului cu (x1, x2, ) i muchiile cu (u1, u2, )):
2.1. Descriei matricea de adiacen, matricea de inciden i matricea Kirchhgoff;
3
0 , 0 ,1 , 1 , .
3.] 7, 18
Elaborai un program pentru gsirea mulii stabile interior maxime cu algoritmul indicat.
I.
#include<iostream>
using namespace std;
int a[7][7], n, Y[20], Intermediar[20], k;
int L[20][20], nL;
int Ls[20][20], nLs=0;
int I[20][20], nI=0;
int Is[20][20], nIs=0;
void afisare(int q[7][7])
{ int i, j;
cout<<"Afisarea matricii:";
for(i=0; i<n; i++)
{ cout<<endl;
for (j=0; j<n; j++)
{
cout<<" "<<q[i][j]; }}}
void intersectia(int *m, int *y, int *Intermediar)
{ int i, j;
Intermediar[0]=0;
for (i=1; i<=m[0]; i++)
{ for (j=1; j<=y[0]; j++)
{ if (m[i]==y[j])
Intermediar[0]++;
Intermediar[Intermediar[0]]=m[i]; }}}
if (Intermediar[0]==0) //daca intersectia este vida
{ Intermediar[0]=1;
Intermediar[1]=0; //vom considera multimea vida=0}}
int include(int *m, int *y)
{ int i, j, t=0, rezultat;
for (i=1; i<=m[0]; i++)}
for (j=1; j<=y[0]; j++)
{ if (m[i]==y[j])
t++; }
if (m[0]==t && m[0]!=0)
rezultat=1;
else
rezultat=0;
return rezultat;}
void construire(int *m, int *oricare)
{ int i;
for (i=0; i<=m[0]; i++)
oricare[i]=m[i];}
void Pasul2()
{ int i;
Y[0]=0;
for (i=0; i<k+1; i++)
{ if (a[k][i]==0)
{ Y[0]++;
Y[Y[0]]=i+1;}}
cout<<endl<<"Vectorul Y "<<k+1;
cout<<endl<<" { ";
for (i=1; i<=Y[0]; i++)
cout<<" x"<<Y[i];
cout<<" }"<<endl;}
void Pasul3()
{
nIs=0;
int i, j;
for (i=0; i<nL; i++)
{
intersectia(L[i], Y, Intermediar);
if (Intermediar[0]>=1 && Intermediar[1]!=0)
{
construire(Intermediar, Is[nIs]);
nIs++;
}
if (Intermediar[0]==1 && Intermediar[1]==0)
{
Is[nIs][0]=1;
Is[nIs][1]=0;
nIs++;
}
}
cout<<"Matricea Is "<<k;
for (i=0; i<nIs; i++)
{
cout<<endl<<" {";
for (j=1; j<=Is[i][0]; j++)
cout<<" x"<<Is[i][j];
cout<<" }";
}
cout<<endl;
}
void Pasul4()
{
nI=0;
int i, j, q, s[20], contor[20], c=0;
for (i=0; i<=20; i++)
s[i]=1;
for (i=0; i<20; i++)
contor[i]=0;
for (i=0; i<nIs; i++)
{
for (j=0; j<nIs; j++)
{
if (i!=j && include(Is[i], Is[j])==1)
s[i]=0;
if (i!=j && include(Is[j], Is[i])==1)
s[j]=0;
if (i!=j && include(Is[j], Is[i])==1 && include(Is[i], Is[j])==1)
{
contor[i]++;
}
}
}
for (i=0; i<nIs; i++)
{
if (s[i]==1)
{
construire(Is[i], I[nI]);
nI++;}}
for (i=0; i<nIs; i++)
{
if (contor[i]>0)
{
for (j=0; j<nIs; j++)
{
if (i!=j && contor[i]==contor[j] && include(Is[i], Is[j])==1 && include(Is[j], Is[i])==1)
{
for (q=0; q<nI; q++)
{
if (i!=q && include(Is[i], I[q])==1)
c++;
}
if (c==0)
{
construire(Is[i], I[nI]);
nI++;
}
c=0; }}}}
if (nI==0)
{
I[0][0]=1;
I[0][1]=0;
nI++;
}
cout<<"Matricea I:"<<k;
for (i=0; i<nI; i++)
{
cout<<endl<<"{";
for (j=1; j<=I[i][0]; j++)
cout<<" x"<<I[i][j];
cout<<" }";
}
cout<<endl;
}
void Pasul5()
{
int i, j, cond1, cond2;
nLs=0;
for (i=0; i<nL; i++)
{
if (include(L[i], Y))
{
construire(L[i], Ls[nLs]);
Ls[nLs][0]++;
Ls[nLs][Ls[nLs][0]]=k+1;
nLs++;
}
else
{
construire(L[i], Ls[nLs]);
nLs++;
intersectia(L[i], Y, Intermediar);
if (Intermediar[0]==1 && Intermediar[1]==0)
{
for (j=0; j<nI; j++)
{
if (I[j][0]==1 && I[j][1]==0)
{
Ls[nLs][0]=1;
Ls[nLs][1]=k+1;
nLs++;}}}
else
{
for (j=0; j<nI; j++)
{
if (include(Intermediar, I[j])==1 && include(I[j], Intermediar)==1 && Intermediar[1]!=0)
{
construire(Intermediar, Ls[nLs]);
Ls[nLs][0]++;
Ls[nLs][Ls[nLs][0]]=k+1;
nLs++;}}}}}
cout<<"Matricea Ls "<<k+1;
for (i=0; i<nLs; i++)
{
cout<<endl<<" {";
for (j=1; j<=Ls[i][0]; j++)
cout<<" x"<<Ls[i][j];
cout<<" }";
}
cout<<endl;
}
void Pasul6()
{
nL=0;
int i, j, q, s[20], contor[20], c=0;
for (i=0; i<20; i++)
s[i]=1;
for (i=0; i<20; i++)
contor[i]=0;
for (i=0; i<nLs; i++)
{
for (j=0; j<nLs; j++)
{
if (i!=j && include(Ls[i], Ls[j])==1)
s[i]=0;
if (i!=j && include(Ls[j], Ls[i])==1)
s[j]=0;
if (i!=j && include(Ls[j], Ls[i])==1 && include(Ls[j], Ls[i])==1)
contor[i]++;
}
}
for(i=0; i<nLs; i++)
{
if (s[i]==1)
{
construire(Ls[i], L[nL]);
nL++;}}
for (i=0; i<nLs; i++)
{
if (contor[i]>0)
{
for (j=0; j<nLs; j++)
{
if (i!=j && contor[i]==contor[j] && include(Ls[i], Ls[j])==1 && include(Ls[j], Ls[i])==1)
{
for (q=0; q<nL; q++)
{
if (i!=q && include(Ls[i], L[q])==1)
c++;
}
if (c==0)
{
construire(Ls[i], L[nL]);
nL++;}}}}}
cout<<"Matricea L "<<k+1;
for (i=0; i<nL; i++)
{
cout<<endl<<" {";
for (j=0; j<=L[i][0]; j++)
cout<<" x"<<L[i][j];
cout<<" }";
}
cout<<endl;
}
main()
{
int i, j;
cout<<"Matricea de adiacenta definita implicit, ( cu nr.de virfuri=7 ) este == > "<<endl;
n=7; // numarul de virfuri al grafului G4 este prestabilt 7
/*int a[7][7] =
{
{0, 1, 0, 0, 0, 1, 1},
{1, 0, 1, 0, 0, 1, 1},
{0, 1, 0, 1, 1, 0, 0},
{0, 0, 1, 0, 1, 1, 0},
{0, 0, 1, 1, 0, 1, 0},
{1, 1, 0, 1, 1, 0, 1},
{1, 1, 0, 0, 0, 1, 0},
};
*/
a[0][0]=0;
a[0][1]=1;
a[0][2]=0;
a[0][3]=0;
a[0][4]=0;
a[0][5]=1;
a[0][6]=1;
a[1][0]=1;
a[1][1]=0;
a[1][2]=1;
a[1][3]=0;
a[1][4]=0;
a[1][5]=1;
a[1][6]=1;
a[2][0]=0;
a[2][1]=1;
a[2][2]=0;
a[2][3]=1;
a[2][4]=1;
a[2][5]=0;
a[2][6]=0;
a[3][0]=0;
a[3][1]=0;
a[3][2]=1;
a[3][3]=0;
a[3][4]=1;
a[3][5]=1;
a[3][6]=0;
a[4][0]=0;
a[4][1]=0;
a[4][2]=1;
a[4][3]=1;
a[4][4]=0;
a[4][5]=1;
a[4][6]=0;
a[5][0]=1;
a[5][1]=1;
a[5][2]=0;
a[5][3]=1;
a[5][4]=1;
a[5][5]=0;
a[5][6]=1;
a[6][0]=1;
a[6][1]=1;
a[6][2]=0;
a[6][3]=0;
a[6][4]=0;
a[6][5]=1;
a[6][6]=0;
afisare(a);
L[0][0]=1;
L[0][1]=1;
nL=1;
for (k=1; k<=n-1; k++)
{
Pasul2();
Pasul3();
Pasul4();
Pasul5();
Pasul6();
}
cout<<endl<<endl<<"Multimile intern stabile maximale sunt:";
for (i=0; i<nL; i++)
{
cout<<endl<<" {";
for (j=1; j<=L[i][0]; j++)
cout<<" x"<<L[i][j];
cout<<" }";
}
cout<<endl<<endl<<"Multimile intern stabile maxime sunt:";
int maximum;
maximum=L[0][0];
for(i=0; i<nL; i++)
{
if (L[i][0]>maximum)
maximum=L[i][0];
}
for (i=0; i<nL; i++)
{
if (L[i][0]==maximum)
{
cout<<endl<<" {";
for (j=1; j<=L[i][0]; j++)
cout<<" x"<<L[i][j];
cout<<" }";
}
}
cout<<endl;
}
10
Dupa executare :
II.
Graful 4.
x1
x2
u1
x3
u2
u5
u10
u11
x7
u3
u8
u12
u9
II.1
u6
x5
u7
x6
u4
x4
11
O matrice binar
de vrfuri
X1
X2
X3
X4
X5
X6
X7
X1
X2
X3
X4
X5
X6
X7
A aij
X G x1 , x2 ,..., xn
, dac:
1, n cazul cnd xi x j ,
aij
0, n caz contrar.
Matricea de adiacen a grafului este o matrice simetric cu elementele de pe diagonala principal egale cu
zero. Liniile i coloanele acestei matrici corespund vrfurilor grafului. Numrul de uniti dintr-o linie (coloan) este
egal cu gradul vrfului corespunztor acestei linii (coloane).
U1
U2
U3
U4
U5
U6
U7
U8
U9
U10
U11
U12
X1
X2
X3
X4
0
0
1
0
1
1
0
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
X5
X6
X7
B bij
O matrice binar
, de dimensiune n m se numete matrice de inciden a grafului G X ;U ,
X {x1 , x 2 ,..., x n } U {u1 , u2 ,..., u m }
,
, dac :
1, n cazul cnd vrful xi i muchia u j sunt incidente ,
bij
0, n caz contrar.
12
X1
X1
X2
X3
X4
X5
X6
X7
O matrice binar
A aij
3
-1
0
0
0
-1
-1
X2
-1
4
-1
0
0
-1
-1
X3
0
-1
X4
0
0
-1
3
-1
-1
0
0
3
-1
-1
0
X5
0
0
-1
-1
3
-1
0
X6
-1
-1
0
-1
-1
X7
-1
-1
0
0
0
-1
-1
In matricea lui Kirchhoff suma elementelor oricarei linii si a oricare coloane este = cu zero.
II.2
Determinarea numerelor (G ) i (G )
II.3
X
1
X
3
X
7
X
4
X
6
13
X
5
Graf complementar al grafului G ;U este graful, cu aceeai mulime de vrfui X, n care dou
vrfuri sunt adiacente, dac i numai dac ele nu sunt adiacente n G.
Graful complementar se noteaz prin G .
II.4
Descrierea unui subgraf complet cu numrul maxim de vrfuri a lui G
Subgraf = Dac dintr-un graf G=(X,U) se suprim cel puin un nod mpreun cu muchiile incidente lui, atunci noul
graf G=(X,U), U U si X X se numete subgraf al lui G.
Lexemul complet ne sugereaza faptul ca exist o muchie ntre oricare dou noduri.
Subgraful complet cu numarul maxim de virfuri este: S (X, U):
Unde X={x1, x2, x6, x7} U={u1, u8, u9, u10, u11, u12}.
Concluzie intre oricare 2 noduri exista o muchie si am folosit numarul maxim de virfuri din graful G4.
II.5
14
Lant al grafului G o succesiune de noduri L=[x1, x2, ..., xk], unde x1,..., xk X, cu proprietatea c [xk-1, xk]
U. ( adic exist muchiile [x1, x2],..., [xk-1, xk] n graful G ).
Ciclu un lan n care primul nod coincide cu ultimul.
Lanul, toate vrfurile cruia sunt distincte dou cte dou, se numete lan elementar.
Ciclul toate vrfurile cruia sunt distincte dou cte dou excepie fcnd primul i ultimul, se numete ciclu
elementar.
Lantul elementar de lungime maxima:
A={x1, x3},{ x3, x6 },{ x3, x7 },{ x1, x4 },{ x4, x7 },{ x1, x5 },{ x5, x7 },{ x2, x4 },{x2,x5 }
II.6.2 b) mulimile stabile exterior minimale
Submulimea de vrfuri A X a unui graf G se numete stabil exterior, dac pentru oricare vrf y X \ A
exist un vrf x A astfel nct y ~ x .
Submulimea de vrfuri stabil exterior a unui graf G se numete minimal , dac n G nu exist o alt mulime
stabil exterior B astfel nct A B .
Cu alte cuvinte, mulimea stabil exterior este minimal, dac orice submulime proprie a acesteia nu este la rndul
su stabil exterior.
A={x1, x3},{ x3, x6 },{ x3, x7 },{ x1, x4 },{ x4, x7 },{ x1, x5 },{ x5, x7 },{ x2, x4 },{x2,x5 }
II.6.3 c) clicele maximale
Submulimea de vrfuri A X a grafului G se numete clic, dac oricare dou vrfuri din A sunt adiacente.
Clica A se numete maximal, dac n graf nu exist o alt clic B astfel, nct A B .
15
Submulimea de vrfuri A X a unui graf G se numete acoperire de vrfuri, dac orice muchie din G este
incident cel puin unui vrf din A.
O acoperire de vrfuri se numete minimal, dac orice submulime proprie a sa nu formeaz la rndul su
acoperire de vrfuri.
Submulimea de muchii E ' U a unui graf G ( X ;U ) se numete acoperire de muchii, dac orice vrf din
G este incident cel puin unei muchii din E'.
Acoperirea de muchii E' se numete minimal, dac n graf nu exist o alt acoperire de muchii T ' astfel
nct T ' E ' (adic orice submulime proprie din E' nu formeaz acoperire de muchii).
E' = { u4, u5, u11, u12 }, { u2, u6, u7, u11, u12 }, { u1, u2, u5, u7, u9 },{ u3, u4, u10, u8 },
{ u1, u3, u6, u11 }, { u1, u5, u7, u10 }
Cuplajul E se numete maximal, dac n graf nu exist un alt cuplaj T astfel nct E T
E={ u2, u7 }, { u5, u10 }, { u7, u10 }, { u1, u5,u7 }, { u1, u4, u9 }, { u2, u4, u10 },
{ u3, u8, u10 }, { u5, u11, u12 }
II.7
Determinarea numerelor 0 , 0 , 1 , 1 , .
0 = 2
0 = 4
II.8
Yk 1
1. Y2 x 2
I k*
I 1*
Ik
L*k 1
I 1
L*2 x1 , x 2
16
Lk 1
L2 x1 , x 2
2. Y3 x1 , x3
I 2* , x 1
3. Y4 x1 , x 2 , x 4
I 3* x1 , x 2
4. Y5 x1 , x2 , x5
I x1 , x2 }
5. Y6 x3 , x6
I x3
*
4
I 2 , x 1
I 3 x1 , x 2
I 4 x1 , x 2 }
I 5 x3
*
5
L*3 x 2 , x3 , x1 , x3
L3 x 2 , x1 , x3
L {{ x1 , x3 , {x1 , x 4 },
L4 {{ x1 , x3 },{x1 , x4 },
*
4
{x 2 , x 4 }}
{x 2 , x4 }}
L*5 x1 , x3 , x1 , x 4 ,
L5 x1 , x3 , x1 , x 4 ,
x1 , x3 , x1 , x4 ,
L*6 x3 , x6 , x1 , x5 ,
x , x x , x
2 4 2 5
x1 , x3 , x1 , x4 ,
L6 x3 , x6 , x1 , x5 ,
x , x x , x
2 4 2 5
x1 , x3 , x3 , x7 ,
x , x , x , x ,
1
5
3 6
x1 , x3 , x3 , x7 ,
x , x , x , x ,
1
5
3 6
x2 , x5 x2 , x4
x1, x5
x2 , x5 x2 , x4
x1, x5
6. Y7 x3 , x4 , x5 , x7 I 6* x3 , x4 , x5 I 6 x3, x4 , x5 L*7 x1 , x4 , x4 , x7 ,
x , x x , x ,
5
7
2
4
x2 , x5
L7 x1 , x4 , x4 , x7 ,
x , x x , x ,
5 7 2 4
x2 , x5
III.
3.2
x1
Graful 4
x2
u1
x3
u2
u5
u10
u11
x7
u3
u8
u12
u9
u6
u7
x6
3.3
x5
Probleme teoretice
3.3.1 Problema 7
7. S se verifice care dintre urmtoarele afirmaii este adevrat i care este fals:
17
u4
x4
reuniunea a dou lanuri disjuncte ce leag vrfurile x i y ale unui graf G formeaza un ciclu elementar;
reuniunea a dou lanuri elementare disjuncte ce leag vrfurile x i y ale unui graf G formeaz un ciclu elementar.
Raspuns:
Ciclu elementar este fomat doar din noduri disjuncte,
primul si ultimul.
Lanturi disjuncte sint lanturi ce nu au varfuri
Lan elementar este lanul care conine numai noduri
exceptie facand
comune.
distincte.
1) Reuniunea
a 2 lanturi
disjuncte
formeaza
un ciclu
elementar
Deci daca facem reuniunea lor, aceste lanturi la sigur formeaza un ciclu elementar, in sens ca nu trec de 2 ori prin
acelasi varf si exceptie face primul si ultimul.
De exemplu: C = { x1,x2,x4,x7,x1 }
2) Reuniunea a 2 lanturi disjuncte elementare nu formeaza un ciclu elementar
Nu formeaza un ciclu elementar deoarece:
Lanturile sint si disjuncte si elementare.
Disjuncte nu au varfuri comune
Lant elementar disjunct lant ce nu trece de 2 ori prin acelasi punct
Deci ele practic din start nu formeaza un ciclu.
3.3.2 Problema 18
18. n cazul unui graf neorientat G ( X ;U ) , s se verifice inegalitatea:
0 (G ) 0 (G )
Raspuns:
Cardinalul mul imii acoperire cu vrfuri minime (nr. varfuri din acoperirea minima)
Submulimea de vrfuri A X a unui graf G se numete acoperire de vrfuri, dac orice muchie din G este
incident cel puin unui vrf din A.
Subgraf complet
0 (G ) 0 (G ) nu este corecta.
IV.
Concluzie
Am realizat ca studierea algoritmului lui Bednarek si Taulbe este foarte utila, iti permite insusirea unor definitii utile
in Teoria Grafurilor si deasemenea iti demonstreaza eficienta si simplitatea unor algoritmi pentru stabilirea scopului
final, gasirea unor multimi stabile interior maxime de ex.
Laboratorul efectuat este la fel de util, impreuna cu definitiile, exemplele si demonstrarile pe care le face fiecare
student.
19