facultatea de matematică și informatică lecții de...
TRANSCRIPT
![Page 1: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/1.jpg)
Facultatea de Matematică și InformaticăLecții de pregătire – Admitere FMI
![Page 2: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/2.jpg)
![Page 3: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/3.jpg)
Graf neorientat: G = (V, E)
◦ vârf (nod), muchie
◦ gradul unui vârf
◦ vârfuri adiacente
◦ lanţ
◦ ciclu
◦ distanță
![Page 4: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/4.jpg)
Graf neorientat: G = (V, E)
◦ graf conex
◦ componentă conexă
![Page 5: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/5.jpg)
două componente conexe
![Page 6: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/6.jpg)
Graf orientat: G = (V, E)
◦ vârf (nod), arc
◦ gradul unui vârf - intern, extern
◦ drum
◦ circuit
![Page 7: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/7.jpg)
Arbore
◦ arbore cu rădăcină
◦ fiu, tată
◦ ascendent, descendent
◦ frunză
1
6
93
4
87
5
2
![Page 8: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/8.jpg)
![Page 9: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/9.jpg)
Matrice de adiacenţă
Liste de adiacenţă
Listă de muchii/arce
![Page 10: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/10.jpg)
Matrice de adiacenţă
1 2 3 4 5 6
1 0 1 1 0 1 0
2 1 0 1 1 0 1
3 1 1 0 0 0 0
4 0 1 0 0 0 1
5 1 0 0 0 0 1
6 0 1 0 1 1 0
![Page 11: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/11.jpg)
Lista de adiacenţă
6 noduri:
1: 2, 3, 5
2: 1, 3, 4, 6
3: 1, 2
4: 2, 6
5: 1, 6
6: 2, 4, 5
![Page 12: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/12.jpg)
Construcţia din lista de muchii
Intrare: n,m și muchiile
6
8
1 2
1 3
2 3
2 4
4 6
2 6
1 5
5 6
Surse: 1_constructie_matrice_adiacenta_calcul_grad.cpp /pas
1 2 3 4 5 6
1 0 1 1 0 1 0
2 1 0 1 1 0 1
3 1 1 0 0 0 0
4 0 1 0 0 0 1
5 1 0 0 0 0 1
6 0 1 0 1 1 0
![Page 13: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/13.jpg)
Construcţia matricei de adiacență din lista de muchii
int a[20][20], n, m;
void citire(){
int i,j,x,y;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
for(i=1;i<=m;i++){
cin>>x>>y;
a[x][y]=1;
a[y][x]=1; //neorientat
}
}
var a:array[1..20,1..20] of integer;
n,m:integer;
procedure citire;
var i,j,x,y:integer;
begin
readln(n,m);
for i:=1 to n do
for j:=1 to n do
a[i,j]:=0;
for i:=1 to m do
begin
readln(x,y);
a[x,y]:=1;
a[y,x]:=1; //neorientat
end;
end;
![Page 14: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/14.jpg)
Construcţia matricei de adiacență din lista de muchii
int a[20][20], n, m;
void citire(){
int i,j,x,y;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
for(i=1;i<=m;i++){
cin>>x>>y;
a[x][y]=1;
a[y][x]=1; //neorientat
}
}
var a:array[1..20,1..20] of integer;
n,m:integer;
procedure citire;
var i,j,x,y:integer;
begin
readln(n,m);
for i:=1 to n do
for j:=1 to n do
a[i,j]:=0;
for i:=1 to m do
begin
readln(x,y);
a[x,y]:=1;
a[y,x]:=1; //neorientat
end;
end;
1_constructie_matrice_adiacenta_calcul_grad.cpp
![Page 15: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/15.jpg)
Determinarea gradului unui vârf
![Page 16: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/16.jpg)
Determinarea gradului unui vârf
int grad(int x){
int j,nr=0;
for(j=1;j<=n;j++)
if(a[x][j]==1)
nr++;
return nr;
}
function grad(x:integer):integer;
var nr,j:integer;
begin
nr:=0;
for j:=1 to n do
if a[x,j]=1 then
inc(nr);
grad:=nr;
end;
![Page 17: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/17.jpg)
Construcţia din lista de muchii
Intrare: n,m și muchiile
6
8
1 2
1 3
2 3
2 4
4 6
2 6
1 5
5 6
Cum memorăm listele de adiacență?
![Page 18: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/18.jpg)
Folosind tot matrice nxn pentru a le memora
6
8
1 2
1 3
2 3
2 4
4 6
2 6
1 5
5 6
0 1 2 3 4 5 6
1 3 2 3 5 0 0 0
2 4 1 3 4 6 0 0
3 2 1 2 0 0 0 0
4 2 2 6 0 0 0 0
5 2 1 6 0 0 0 0
6 3 2 4 5 0 0 0
folosim coloana 0 pentru a memora gradul vârfului
l[0][x] = gradul lui x
= câte elemente are lista de adiacență a lui x
Surse: 2_liste_adiacenta_memorate_in_matrice.cpp / pas
![Page 19: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/19.jpg)
int l[100][100], n,m;
//l[i][0]=gradul varfului i
void citire(){
int i,j,x,y,g;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>x>>y;
/*l[x][0]=gradul lui x=la
al catelea vecin am ajuns*/
l[x][0]++;
l[x][l[x][0]]=y;
//neorientat
l[y][0]++;
l[y][l[y][0]]=x;
}
for(i=1;i<=n;i++){
cout<<i<<": ";
g=l[i][0];
for(j=1;j<=g;j++)
cout<<l[i][j]<<" ";
cout<<endl;
}}
var l: array[1..100,0..100] of integer;
var n,m:integer;
procedure citire;
var i,j,x,y,g:integer;
begin
readln(n,m);
for i:=1 to n do l[i,0]:=0;
for i:=1 to m do begin
readln(x,y);
{l[x][0]=gradul lui x=la al catelea vecin am
ajuns}
l[x,0]:=l[x,0]+1;
l[x,l[x][0]]:=y;
//neorientat
l[y,0]:=l[y,0]+1; l[y,l[y,0]]:=x;
end;
for i:=1 to n do begin
write(i,': ');
g:=l[i,0];
for j:=1 to g do write(l[i,j],' ');
writeln;
end; end;
![Page 20: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/20.jpg)
int l[100][100], n,m;
//l[i][0]=gradul varfului i
void citire(){
int i,j,x,y,g;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>x>>y;
/*l[x][0]=gradul lui x=la
al catelea vecin am ajuns*/
l[x][0]++;
l[x][l[x][0]]=y;
//neorientat
l[y][0]++;
l[y][l[y][0]]=x;
}
for(i=1;i<=n;i++){
cout<<i<<": ";
g=l[i][0];
for(j=1;j<=g;j++)
cout<<l[i][j]<<" ";
cout<<endl;
}}
var l: array[1..100,0..100] of integer;
var n,m:integer;
procedure citire;
var i,j,x,y,g:integer;
begin
readln(n,m);
for i:=1 to n do l[i,0]:=0;
for i:=1 to m do begin
readln(x,y);
{l[x][0]=gradul lui x=la al catelea vecin
am ajuns}
l[x,0]:=l[x,0]+1;
l[x,l[x][0]]:=y;
//neorientat
l[y,0]:=l[y,0]+1; l[y,l[y,0]]:=x;
end;
for i:=1 to n do begin
write(i,': ');
g:=l[i,0];
for j:=1 to g do write(l[i,j],' ');
writeln;
end; end;
![Page 21: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/21.jpg)
int l[100][100], n,m;
//l[i][0]=gradul varfului i
void citire(){
int i,j,x,y,g;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>x>>y;
/*l[x][0]=gradul lui x=la
al catelea vecin am ajuns*/
l[x][0]++;
l[x][l[x][0]]=y;
//neorientat
l[y][0]++;
l[y][l[y][0]]=x;
}
for(i=1;i<=n;i++){
cout<<i<<": ";
g=l[i][0];
for(j=1;j<=g;j++)
cout<<l[i][j]<<" ";
cout<<endl;
}}
var l: array[1..100,0..100] of integer;
var n,m:integer;
procedure citire;
var i,j,x,y,g:integer;
begin
readln(n,m);
for i:=1 to n do l[i,0]:=0;
for i:=1 to m do begin
readln(x,y);
{l[x][0]=gradul lui x=la al catelea vecin
am ajuns}
l[x,0]:=l[x,0]+1;
l[x,l[x][0]]:=y;
//neorientat
l[y,0]:=l[y,0]+1; l[y,l[y,0]]:=x;
end;
for i:=1 to n do begin
write(i,': ');
g:=l[i,0];
for j:=1 to g do write(l[i,j],' ');
writeln;
end; end;
![Page 22: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/22.jpg)
int l[100][100], n,m;
//l[i][0]=gradul varfului i
void citire(){
int i,j,x,y,g;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>x>>y;
/*l[x][0]=gradul lui x=la
al catelea vecin am ajuns*/
l[x][0]++;
l[x][l[x][0]]=y;
//neorientat
l[y][0]++;
l[y][l[y][0]]=x;
}
for(i=1;i<=n;i++){
cout<<i<<": ";
g=l[i][0];
for(j=1;j<=g;j++)
cout<<l[i][j]<<" ";
cout<<endl;
}}
var l: array[1..100,0..100] of integer;
var n,m:integer;
procedure citire;
var i,j,x,y,g:integer;
begin
readln(n,m);
for i:=1 to n do l[i,0]:=0;
for i:=1 to m do begin
readln(x,y);
{l[x][0]=gradul lui x=la al catelea vecin
am ajuns}
l[x,0]:=l[x,0]+1;
l[x,l[x][0]]:=y;
//neorientat
l[y,0]:=l[y,0]+1; l[y,l[y,0]]:=x;
end;
for i:=1 to n do begin
write(i,': ');
g:=l[i,0];
for j:=1 to g do write(l[i,j],' ');
writeln;
end; end;
![Page 23: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/23.jpg)
Liste implementate - pointeri
Surse: 3_liste_adiacenta_memorate_inlantuit.cpp / pas
![Page 24: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/24.jpg)
struct nod{ int info;
nod* urm;};
nod* l[100]; nod* p;
int n,m;
void citire(){
int i,x,y;
cin>>n>>m;
for(i=1;i<=n;i++)
l[i]=NULL;
for(i=1;i<=m;i++){
cin>>x>>y;
p=new nod;
p->info=y;
p->urm=l[x];
l[x]=p;
//neorientat
p=new nod;
p->info=x;
p->urm=l[y];
l[y]=p;
}
type elem=^nod;
nod=record info:integer;
urm:elem;
end;
var l: array[1..100] of elem; var p:elem;
var n,m:integer;
procedure citire;
var i,x,y:integer;
begin
readln(n,m);
for i:=1 to n do l[i]:=nil;
for i:=1 to m do
begin
readln(x,y);
new(p);
p^.info:=y;
p^.urm:=l[x];
l[x]:=p; {neorientat}
new(p); p^.info:=x;
p^.urm:=l[y]; l[y]:=p;
end;
![Page 25: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/25.jpg)
struct nod{ int info;
nod* urm;};
nod* l[100]; nod* p;
int n,m;
void citire(){
int i,x,y;
cin>>n>>m;
for(i=1;i<=n;i++)
l[i]=NULL;
for(i=1;i<=m;i++){
cin>>x>>y;
p=new nod;
p->info=y;
p->urm=l[x];
l[x]=p;
//neorientat
p=new nod;
p->info=x;
p->urm=l[y];
l[y]=p;
}
type elem=^nod;
nod=record info:integer;
urm:elem;
end;
var l: array[1..100] of elem; var p:elem;
var n,m:integer;
procedure citire;
var i,x,y:integer;
begin
readln(n,m);
for i:=1 to n do l[i]:=nil;
for i:=1 to m do
begin
readln(x,y);
new(p);
p^.info:=y;
p^.urm:=l[x];
l[x]:=p; {neorientat}
new(p); p^.info:=x;
p^.urm:=l[y]; l[y]:=p;
end;
![Page 26: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/26.jpg)
struct nod{ int info;
nod* urm;};
nod* l[100]; nod* p;
int n,m;
void citire(){
int i,x,y;
cin>>n>>m;
for(i=1;i<=n;i++)
l[i]=NULL;
for(i=1;i<=m;i++){
cin>>x>>y;
p=new nod;
p->info=y;
p->urm=l[x];
l[x]=p;
//neorientat
p=new nod;
p->info=x;
p->urm=l[y];
l[y]=p;
}
type elem=^nod;
nod=record info:integer;
urm:elem;
end;
var l: array[1..100] of elem; var p:elem;
var n,m:integer;
procedure citire;
var i,x,y:integer;
begin
readln(n,m);
for i:=1 to n do l[i]:=nil;
for i:=1 to m do
begin
readln(x,y);
new(p);
p^.info:=y;
p^.urm:=l[x];
l[x]:=p; {neorientat}
new(p); p^.info:=x;
p^.urm:=l[y]; l[y]:=p;
end;
![Page 27: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/27.jpg)
struct nod{ int info;
nod* urm;};
nod* l[100]; nod* p;
int n,m;
void citire(){
int i,x,y;
cin>>n>>m;
for(i=1;i<=n;i++)
l[i]=NULL;
for(i=1;i<=m;i++){
cin>>x>>y;
p=new nod;
p->info=y;
p->urm=l[x];
l[x]=p;
//neorientat
p=new nod;
p->info=x;
p->urm=l[y];
l[y]=p;
}
type elem=^nod;
nod=record info:integer;
urm:elem;
end;
var l: array[1..100] of elem; var p:elem;
var n,m:integer;
procedure citire;
var i,x,y:integer;
begin
readln(n,m);
for i:=1 to n do l[i]:=nil;
for i:=1 to m do
begin
readln(x,y);
new(p);
p^.info:=y;
p^.urm:=l[x];
l[x]:=p; {neorientat}
new(p); p^.info:=x;
p^.urm:=l[y]; l[y]:=p;
end;
![Page 28: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/28.jpg)
//afisare liste
for(i=1;i<=n;i++){
cout<<i<<": ";
p=l[i];
while(p!=NULL){
cout<<p->info<<" ";
p=p->urm;
}
cout<<endl;
}
}//citire
{afisare liste}
for i:=1 to n do
begin
write(i,': ');
p:=l[i];
while p<>nil do
begin
write(p^.info,' ');
p:=p^.urm;
end;
writeln;
end;
end;
![Page 29: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/29.jpg)
Vector tata
Lista de fii
(descendenți direcți)
1
6
93
4
87
5
2
![Page 30: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/30.jpg)
![Page 31: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/31.jpg)
Dat un vector tata asociat unui arbore (arbore genealogic)
să se determine:
1) rădăcina arborelui
2) frunzele arborelui
3) un lanţ de la un vârf dat la rădăcină, afişat direct şi
invers = ascendenții unui vârf (afişați de la tată în
sus/ de la rădăcină în jos)
4) nivelul (generația) fiecărui vârf în arbore şi înălţimea
arborelui (=numărul de generații-1)
Surse: 4_arbori_frunze_radacina_nivel_inaltime.cpp / pas
![Page 32: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/32.jpg)
![Page 33: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/33.jpg)
Rădăcina este vârful care are tata egal cu 0
![Page 34: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/34.jpg)
int radacina(){
int i;
for(i=1;i<=n;i++)
if(tata[i]==0)
return i;
return 0;
}
function radacina:integer;
var i:integer;
begin
for i:=1 to n do
if tata[i]=0 then
radacina:=i;
end;
![Page 35: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/35.jpg)
![Page 36: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/36.jpg)
Frunzele sunt vârfurile care nu apar în
vectorul tata
![Page 37: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/37.jpg)
Varianta 1 – Testăm pentru fiecare vârf i=1… n
dacă apare în vectorul tata
Complexitate?
void frunze1(){
int i,j,ok;
for(i=1;i<=n;i++){
ok=1;
for(j=1;j<=n;j++)
if (i==tata[j])
ok=0;
if (ok)
cout<<i<<' ';
}
cout<<endl;
}
procedure frunze1;
var i,j:integer;
ok:boolean;
begin
for i:=1 to n do
begin
ok:=true;
for j:=1 to n do
if i=tata[j] then
ok:=false;
if ok then
write(i,' ');
end;
writeln;
end;
![Page 38: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/38.jpg)
Varianta 1 – Testăm pentru fiecare vârf i=1… n
dacă apare în vectorul tata
Complexitate? - O(n2)
void frunze1(){
int i,j,ok;
for(i=1;i<=n;i++){
ok=1;
for(j=1;j<=n;j++)
if (i==tata[j])
ok=0;
if (ok)
cout<<i<<' ';
}
cout<<endl;
}
procedure frunze1;
var i,j:integer;
ok:boolean;
begin
for i:=1 to n do
begin
ok:=true;
for j:=1 to n do
if i=tata[j] then
ok:=false;
if ok then
write(i,' ');
end;
writeln;
end;
![Page 39: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/39.jpg)
Varianta 2 – cu vector de apariții
Complexitate: O(n)
![Page 40: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/40.jpg)
void frunze(){
int i;
int v[100];
for(i=1;i<=n;i++)
v[i]=0;
for(i=1;i<=n;i++)
if(tata[i]>0)
v[tata[i]]=1;
for(i=1;i<=n;i++)
if(v[i]==0)
cout<<i<<" ";
cout<<endl;
}
procedure frunze;
var i:integer;
v:array[1..100] of boolean;
begin
for i:=1 to n do
v[i]:=true;
for i:=1 to n do
if tata[i]>0 then
v[tata[i]]:=false;
for i:=1 to n do
if v[i] then
write(i,' ');
writeln;
end;
![Page 41: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/41.jpg)
void frunze(){
int i;
int v[100];
for(i=1;i<=n;i++)
v[i]=0;
for(i=1;i<=n;i++)
if(tata[i]>0)
v[tata[i]]=1;
for(i=1;i<=n;i++)
if(v[i]==0)
cout<<i<<" ";
cout<<endl;
}
procedure frunze;
var i:integer;
v:array[1..100] of boolean;
begin
for i:=1 to n do
v[i]:=true;
for i:=1 to n do
if tata[i]>0 then
v[tata[i]]:=false;
for i:=1 to n do
if v[i] then
write(i,' ');
writeln;
end;
![Page 42: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/42.jpg)
void frunze(){
int i;
int v[100];
for(i=1;i<=n;i++)
v[i]=0;
for(i=1;i<=n;i++)
if(tata[i]>0)
v[tata[i]]=1;
for(i=1;i<=n;i++)
if(v[i]==0)
cout<<i<<" ";
cout<<endl;
}
procedure frunze;
var i:integer;
v:array[1..100] of boolean;
begin
for i:=1 to n do
v[i]:=true;
for i:=1 to n do
if tata[i]>0 then
v[tata[i]]:=false;
for i:=1 to n do
if v[i] then
write(i,' ');
writeln;
end;
![Page 43: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/43.jpg)
1
6
93
4
87
5
2
![Page 44: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/44.jpg)
Se urcă în arbore de la x la rădăcină folosind
vectorul tata
![Page 45: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/45.jpg)
//de la x la radacina
void drum(int x)
{
while(x!=0){
cout<<x<<" ";
x=tata[x];
}
cout<<endl;
}
{de la x la radacina}
procedure drum(x:integer);
begin
while x<>0 do
begin
write(x, ' ');
x:=tata[x];
end;
writeln;
end;
![Page 46: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/46.jpg)
//de la x la radacina
void drum(int x)
{
while(x!=0){
cout<<x<<" ";
x=tata[x];
}
cout<<endl;
}
//de la radacina la x
void drumRec(int x)
{
if(x!=0){
drumRec(tata[x]);
cout<<x<<" ";
}
}
{de la x la radacina}
procedure drum(x:integer);
begin
while x<>0 do
begin
write(x, ' ');
x:=tata[x];
end;
writeln;
end;
{de la radacina la x}
procedure drumRec(x:integer);
begin
if x<>0 then
begin
drumRec(tata[x]);
write(x, ' ');
end;
end;
![Page 47: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/47.jpg)
1
6
93
4
87
5
2
nivelul 0
nivelul 1
nivelul 2
nivelul 3
Înălțime 3
![Page 48: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/48.jpg)
Varianta 1:
◦ pentru fiecare vârf determinăm lanțul până la
rădăcină și lungimea acestuia
![Page 49: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/49.jpg)
int niv[100]={0};
//de la x la radacina
int drumN(int x)
{
int k=0;
while(tata[x]!=0){
x=tata[x];
k++;
}
return k;
}
//in main
int nivmax=0;
niv[radacina()]=0;
for(i=1;i<=n;i++){
niv[i]=drumN(i);
if (niv[i]>nivmax)
nivmax=niv[i];
}
• pentru fiecare vârf determinăm lungimea lanțului până la rădăcină
• înălțimea = maxim dintre aceste lungimi
• Complexitate?
![Page 50: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/50.jpg)
int niv[100]={0};
//de la x la radacina
int drumN(int x)
{
int k=0;
while(tata[x]!=0){
x=tata[x];
k++;
}
return k;
}
//in main
int nivmax=0;
niv[radacina()]=0;
for(i=1;i<=n;i++){
niv[i]=drumN(i);
if (niv[i]>nivmax)
nivmax=niv[i];
}
• pentru fiecare vârf determinăm lungimea lanțului până la rădăcină
• înălțimea = maxim dintre aceste lungimi
• Complexitate? – O(n2)
![Page 51: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/51.jpg)
Varianta 1:
◦ pentru fiecare vârf determinăm lanțul până la
rădăcină și lungimea acestuia
◦ Optimizare ?!
Recursiv:
nivelul unui vârf = nivelul tatălui + 1;
![Page 52: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/52.jpg)
int niv1[100]={0};
//functie care returneaza nivelul lui x
int drumNiv(int x){
if(tata[x]==0) //radacina
return 0;
return 1+drumNiv(tata[x]);
}
//in main
int nivmax=0;
niv1[radacina()]=0;
for(i=1;i<=n;i++){
niv1[i]=drumNiv(i);
if (niv1[i]>nivmax)
nivmax=niv1[i];
}
Varianta 1: recursiv
• nivelul unui vârf = nivelul tatălui + 1
![Page 53: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/53.jpg)
Varianta 1: Complexitate
![Page 54: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/54.jpg)
Varianta 1: Complexitate – O(n2)
![Page 55: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/55.jpg)
Cum evităm parcurgerea de mai multe ori a
unui lanț (și trecerea de mai multe ori pe la
același vârf)?
![Page 56: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/56.jpg)
Varianta 1 – Îmbunătățiri
◦ putem memora nivelurile deja calculate ale
vârfurilor într-un vector, pentru a evita trecerea de
mai multe ori prin același vârf și recalcularea
nivelului acestuia
![Page 57: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/57.jpg)
int niv2[100]={0};
//functie care returneaza nivelul lui x
int drumNiv2(int x){
if(tata[x]==0) //radacina
return 0;
if(niv2[x]==0)//necalculat
niv2[x]= 1+drumNiv2(tata[x]);
return niv2[x];
}
//in main
int nivmax=0;
niv2[radacina()]=0;
for(i=1;i<=n;i++){
niv2[i]=drumNiv(i);
if (niv2[i]>nivmax)
nivmax=niv2[i];
}
![Page 58: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/58.jpg)
int niv2[100]={0};
//functie care returneaza nivelul lui x
int drumNiv2(int x){
if(tata[x]==0) //radacina
return 0;
if(niv2[x]==0)//necalculat
niv2[x]= 1+drumNiv2(tata[x]);
return niv2[x];
}
//in main
int nivmax=0;
niv2[radacina()]=0;
for(i=1;i<=n;i++){
niv2[i]=drumNiv(i);
if (niv2[i]>nivmax)
nivmax=niv2[i];
}
![Page 59: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/59.jpg)
Varianta 1 îmbunătățită:
◦ O(n)
![Page 60: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/60.jpg)
Varianta 2: Parcurgem arborele de la rădăcină
Similar parcurgerii grafurilor
Parcurgere în lățime -> parcurgere pe niveluri a
arborelui
Este mai eficient în acest caz să reprezentăm arborele
cu liste de fii (parcurgere O(n))
6
1
3 9
4
87
5
2
tata=[0, 3, 1, 2, 1, 3, 9, 9, 1]
lista de fii
Complexitate?
Surse: 5_constructie_lista_fii_din_tata.cpp / pas
![Page 61: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/61.jpg)
Varianta 2: Parcurgem arborele de la rădăcină
Similar parcurgerii grafurilor
Parcurgere în lățime -> parcurgere pe niveluri a
arborelui
Este mai eficient în acest caz să reprezentăm arborele
cu liste de fii (parcurgere O(n))
6
1
3 9
4
87
5
2
tata=[0, 3, 1, 2, 1, 3, 9, 9, 1]
lista de fii
Complexitate O(n)
Surse: 5_constructie_lista_fii_din_tata.cpp / pas
![Page 62: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/62.jpg)
int l[100][100], n;
void tata_fii(){
int i,j,x,y,g;
for(i=1;i<=n;i++)
if(tata[i]>0){
//muchie (tata[i],i)
x=tata[i];
y=i;
l[x][0]++;
l[x][l[x][0]]=y;
}
for(i=1;i<=n;i++){
cout<<i<<": ";
g=l[i][0];
for(j=1;j<=g;j++)
cout<<l[i][j]<<" ";
cout<<endl;
}
}
var l: array[1..100,0..100] of integer;
var n:integer;
procedure tata_fii;
var i,j,x,y,g:integer;
begin
for i:=1 to n do l[i,0]:=0;
for i:=1 to n do
if tata[i]<>0 then begin
{muchie (tata[i],i)}
x:=tata[i];
y:=i;
l[x,0]:=l[x,0]+1;
l[x,l[x][0]]:=y;
end;
for i:=1 to n do begin
write(i,': ');
g:=l[i,0];
for j:=1 to g do write(l[i,j],' ');
writeln;
end;
end;
![Page 63: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/63.jpg)
int l[100][100], n;
void tata_fii(){
int i,j,x,y,g;
for(i=1;i<=n;i++)
if(tata[i]>0){
//muchie (tata[i],i)
x=tata[i];
y=i;
l[x][0]++;
l[x][l[x][0]]=y;
}
for(i=1;i<=n;i++){
cout<<i<<": ";
g=l[i][0];
for(j=1;j<=g;j++)
cout<<l[i][j]<<" ";
cout<<endl;
}
}
var l: array[1..100,0..100] of integer;
var n:integer;
procedure tata_fii;
var i,j,x,y,g:integer;
begin
for i:=1 to n do l[i,0]:=0;
for i:=1 to n do
if tata[i]<>0 then begin
{muchie (tata[i],i)}
x:=tata[i];
y:=i;
l[x,0]:=l[x,0]+1;
l[x,l[x][0]]:=y;
end;
for i:=1 to n do begin
write(i,': ');
g:=l[i,0];
for j:=1 to g do write(l[i,j],' ');
writeln;
end;
end;
![Page 64: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/64.jpg)
Concluzii:
Reprezentarea unui arbore cu vectorul tata permite o
parcurgere mai ușoară a arborelui de la frunze spre
rădăcină
Putem parcurge arborele și pornind din rădăcină și
folosi parcurgeri generale de grafuri - lățime (pe
niveluri) și adâncime - dar atunci este mai eficient să
folosim ca reprezentare liste de fii / liste de adiacență
(pe care le putem obține din vectorul tata)
![Page 65: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/65.jpg)
Dat un vector tata asociat unui arbore să se
determine:
1) gradul unui vârf x dat
2) toate vârfurile de pe un nivel p dat
3) cea mai apropiată frunză de rădăcină şi un lanţ
de la rădăcină la aceasta
![Page 66: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/66.jpg)
Dat un vector tata cu elementele aparţinând
mulţimii {0,1,…,n}, să se determine dacă există un
arbore cu vectorul tata asociat egal cu vectorul dat
(admitere 2007)
![Page 67: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/67.jpg)
Trebuie ca
◦ vectorul să aibă un singur element egal cu 0
◦ din rădăcină să se poată ajunge în orice vârf
sau, echivalent, din orice vârf să se poată ajunge
în rădăcină mergând din tată în tată
![Page 68: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/68.jpg)
Trebuie ca
◦ vectorul să aibă un singur element egal cu 0
◦ din rădăcină să se poată ajunge în orice vârf
sau, echivalent, din orice vârf să se poată ajunge
în rădăcină mergând din tată în tată
◦ Idee similară cu cea de la calculul înălțimii:
pornim dintr-un vârf și urcând spre rădăcină
marcăm vârfurile prin care trecem
Sursa: 6_test_vector_tata_valid_2007.cpp
![Page 69: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/69.jpg)
int acc[100]={0};
int viz[100]={0};
/*acc[i]=1 i este accesibil
(printr-un lant) din radacina
viz[i]=1 i a fost vizitat*/
/*x accesibil din radacina <=>
tata[x] este accesibil*/
int accesibil(int x){
if(tata[x]==0) return 1;
if(viz[x]==0){
viz[x]=1;
acc[x]=accesibil(tata[x]);
}
return acc[x];
}
int validUrcare(){
int i,rad,nr;
//test 1 - o singura radacina
nr=0;
for(i=1;i<=n;i++)
if(tata[i]==0){
rad=i;nr++; }
if(nr!=1) return 0;
//test 2 - toate nodurile sunt
accesibile din radacina
for(i=1;i<=n;i++){
viz[i]=0; acc[i]=0;
}
for(i=1;i<=n;i++)
if(accesibil(i)==0)
return 0;
return 1;
}
![Page 70: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/70.jpg)
Ca și la calculul înălțimii, sunt posibile și alte
abordări:
putem verifica și invers, dacă din rădăcină se
poate ajunge în orice vârf - parcurgem
arborele pornind din rădăcină și verificăm în
final dacă au fost vizitate toate vârfurile
pentru această abordare – liste de fii
◦ folosind liste de fii O(n)
◦ folosind vector tata O(n2)
![Page 71: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/71.jpg)
Temă - Dat un vector tata asociat unui arbore şi
două vârfuri x şi y, să se determine cel mai
apropiat ascendent (strămoş) comun celor două
vârfuri
Convenție: dacă x este ascendentul lui y atunci x
este considerat cel mai apropiat ascendent comun
al celor două vârfuri
![Page 72: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/72.jpg)
Temă - Dat un vector tata asociat unui arbore şi
două vârfuri x şi y, să se determine cel mai
apropiat ascendent (strămoş) comun celor două
vârfuri
Idee:
- Marcăm x și ascendenții lui x
- Urcăm din y spre rădăcină până
la primul vârf marcat
Alte idei?
1
6
93
4
87
5
2
x:
![Page 73: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/73.jpg)
![Page 74: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/74.jpg)
Parcurgere = o modalitate prin care, plecând de la un
vârf de start și mergând pe arce/muchii să ajungem la
toate vârfurile accesibile din s
Un vârf v este accesibil din s dacă există un drum/lanț
de la s la v în G.
![Page 75: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/75.jpg)
Idee: Dacă
u este accesibil din s
uvE(G)
atunci v este accesibil din s.
(“din aproape în aproape”)
s u v
![Page 76: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/76.jpg)
Parcurgerea în lățime (BF = breadth first)
Parcurgerea în adâncime (DF = depth first)
![Page 77: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/77.jpg)
![Page 78: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/78.jpg)
Parcurgerea în lățime: se vizitează
- vârful de start s
- vecinii acestuia
- vecinii nevizitați ai acestora
etc
![Page 79: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/79.jpg)
1
2
9
3
4
8
7
5
6
![Page 80: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/80.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
p
![Page 81: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/81.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
p
![Page 82: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/82.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
93 5
p
![Page 83: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/83.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
93 5
p
![Page 84: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/84.jpg)
1 3 5 9 6 42 7 8
1
2
9
3
4
8
7
5
6
1
93 5
p
![Page 85: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/85.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93 5
2
p
![Page 86: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/86.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93 5
2
p
![Page 87: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/87.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93 5
2
p
![Page 88: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/88.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93 5
2
p
![Page 89: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/89.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93 5
2
p
![Page 90: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/90.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 91: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/91.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 92: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/92.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 93: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/93.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 94: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/94.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 95: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/95.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 96: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/96.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 97: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/97.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 98: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/98.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 99: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/99.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 100: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/100.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
![Page 101: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/101.jpg)
1 3 5 9 2 6 4 7 8
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
p
stop
![Page 102: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/102.jpg)
![Page 103: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/103.jpg)
Vârfurile vizitate trebuie marcate:
viz[i]
Arcele/muchiile folosite pentru a descoperi
vârfuri noi accesibile din s formează un arbore:
tata[j] = acel vârf i din care este descoperit
(vizitat) j
1, dacă i a fost vizitat=
0, altfel
![Page 104: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/104.jpg)
Dacă dorim şi determinarea de lanţuri (!!minime) de la
rădăcină la alte vârfuri putem reţine în plus:
tata[j] = acel vârf i din care este descoperit (vizitat) j
niv[i] = nivelul lui i în arborele asociat parcurgerii
= distanța de la s la i
![Page 105: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/105.jpg)
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
![Page 106: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/106.jpg)
Inițializări
pentru i=1,n executa
viz[i]0
tata[i]0
niv[i]
for(i=1;i<=n;i++) {
viz[i]=0;
tata[i]=0;
d[i]=32000;
}
![Page 107: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/107.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
d[j] d[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 108: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/108.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
d[j] d[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 109: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/109.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
d[j] d[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 110: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/110.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
d[j] d[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 111: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/111.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
d[j] d[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 112: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/112.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
d[j] d[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 113: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/113.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 114: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/114.jpg)
![Page 115: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/115.jpg)
Inițializări
pentru i=1,n executa
viz[i]0
tata[i]0
niv[i]
int n;
int a[20][20];
int viz[20],tata[20],niv[20];
int p,u,c[20];
for(i=1;i<=n;i++) {
viz[i]=0;
tata[i]=0;
d[i]=32000;
}
![Page 116: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/116.jpg)
Inițializări
pentru i=1,n executa
viz[i]0
tata[i]0
niv[i]
int n;
int a[20][20];
int viz[20],tata[20],niv[20];
int p,u,c[20];
for(i=1;i<=n;i++) {
viz[i]=0;
tata[i]=0;
niv[i]=n;
}
![Page 117: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/117.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; d[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 118: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/118.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; d[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 119: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/119.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 120: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/120.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 121: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/121.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 122: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/122.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 123: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/123.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
d[j]=d[i]+1;
}
}
}
![Page 124: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/124.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
niv[j]=niv[i]+1;
}
}
}
![Page 125: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/125.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
niv[j]=niv[i]+1;
}
}
}
![Page 126: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/126.jpg)
![Page 127: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/127.jpg)
procedure BF(s)
coada C ;
adauga(s, C)
viz[s] 1; niv[s] 0
cat timp C executa
i extrage(C);
afiseaza(i);
pentru j vecin al lui i
daca viz[j]=0 atunci
adauga(j, C)
viz[j] 1
tata[j] i
niv[j] niv[i]+1
void bf(int s){
int p,u,i,j;
p = u = 1; c[1]=s;
viz[s]=1; niv[s]=0;
while(p<=u){
i=c[p]; p=p+1;
cout<<i<<" ";
for(k=1;k<=l[i][0];k++)
{ j=l[i][k];
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
tata[j]=i;
niv[j]=niv[i]+1;
}
}
}
![Page 128: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/128.jpg)
Matrice de adiacență O(|V|2)
Liste de adiacență O(|V|+|E|)
Sursa ( + aplicații): 7_parcurgerea_latime_liste_adiacenta_cu determinare_distante.cpp
![Page 129: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/129.jpg)
![Page 130: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/130.jpg)
Dat un graf orientat şi două vârfuri u şi v, să
se determine un drum minim de la u la v
void lant(int x){
while(x!=0){
cout<<x<<" ";
x=tata[x];
}
}
void lantr(int x){
if(x!=0){
lantr(tata[x]);
cout<<x<<" ";
}
}
![Page 131: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/131.jpg)
◦ Se apelează bf(u), apoi se afişează drumul de la
u la v folosind vectorul tata (ca la arbori), dacă
există
![Page 132: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/132.jpg)
◦ Se apelează bf(u), apoi se afişează drumul de la
u la v folosind vectorul tata (ca la arbori), dacă
existăbf(u);
if(viz[v] == 1)
drum(v);
else
cout<<“nu exista drum”;
unde funcţia drum este cea de la arbori:
![Page 133: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/133.jpg)
◦ Se apelează bf(u), apoi se afişează drumul de la
u la v folosind vectorul tata (ca la arbori), dacă
existăbf(u);
if(viz[v] == 1)
drum(v);
else
cout<<“nu exista drum”;
unde funcţia drum este cea de la arbori:
void drum(int x){
while(x!=0){
cout<<x<<" ";
x=tata[x];
}
}
void drumRec(int x){
if(x!=0){
drumRec(tata[x]);
cout<<x<<" ";
}
}
![Page 134: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/134.jpg)
◦ Parcurgerea bf(u) se poate opri atunci când
este vizitat v
◦ În general, la terminarea bf(u):
niv[v] = distanța de la u la v
![Page 135: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/135.jpg)
Dacă în loc de graf avem un arbore dat prin
vectorul tata:
putem folosi parcurgerea BF din rădăcina
arborelui pentru a determina nivelul fiecărui vârf
și înălțimea arborelui
putem construi listele de adiacență/de fii
asociate arborelui
o nouă soluție pentru problemele anterioare
de la arbori
![Page 136: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/136.jpg)
Să se verifice dacă un graf dat este conex
ok=1;
for(i=1;i<=n;i++)
if(viz[i]==0)
ok=0;
![Page 137: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/137.jpg)
Graful este conex dacă, prin apelul parcurgerii din
vârful 1, sunt vizitate toate vârfurile
![Page 138: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/138.jpg)
Graful este conex dacă, prin apelul parcurgerii din
vârful 1, sunt vizitate toate vârfurile
bf(1);
ok=1;
for(i=1;i<=n;i++)
if(viz[i]==0)
ok=0;
if(ok==1)
cout<<“conex”;
else
cout<<“neconex”;
![Page 139: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/139.jpg)
Într-un grup de n persoane se cunosc perechile de
persoane care pot comunica direct.
a) Să se determine care este numărul maxim de
persoane din grup care pot comunica oricare două,
direct sau prin intermediari
b) Să se afișeze persoanele cele mai influente din
grup. O persoană este considerată mai influentă
decât alta dacă poate comunica direct cu mai
multe persoane
![Page 140: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/140.jpg)
Idee: Asociem grupului un graf în care vârfurile
sunt persoane şi muchiile unesc persoane care
pot comunica direct.
1
2
34
6 78
5
![Page 141: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/141.jpg)
Idee: Asociem grupului un graf în care vârfurile
sunt persoane şi muchiile unesc persoane care
pot comunica direct.
o a) Problema este echivalentă cu a determina
componenta conexă cu numărul maxim de
vârfuri în graful asociat
o b) Problema este echivalentă cu a determina
vârfurile de grad maxim -temă
![Page 142: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/142.jpg)
a) Pentru a determina componenta conexă cu
numărul maxim de vârfuri în graful asociat:
oModificăm bf(s) astfel încât să returneze numărul
de vârfuri vizitate
oApelăm funcţia bf pentru fiecare vârf nevizitat
anterior pentru a determina componentele
conexe ale grafului şi reţinem valoarea maximă
returnată
![Page 143: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/143.jpg)
int n, a[20][20], viz[20];
int p,u,c[20];
int bf_nr(int s){
int p,u,i,j,nr=0;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
nr++; //cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
}
}
return nr;
}
//in main
int nr,nrmax=0;
for(i=1;i<=n;i++)
if(viz[i]==0){
nr=bf_nr(i);
if(nr>nrmax)
nrmax=nr;
}
cout<<“nr. max:"<<nrmax<<endl;
![Page 144: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/144.jpg)
int n, a[20][20], viz[20];
int p,u,c[20];
int bf_nr(int s){
int p,u,i,j,nr=0;
p = u = 1; c[1]=s;
viz[s]=1;
while(p<=u){
i=c[p]; p=p+1;
nr++; //cout<<i<<" ";
for(j=1;j<=n;j++)
if(a[i][j]==1)
if(viz[j]==0){
u=u+1; c[u]=j;
viz[j]=1;
}
}
return nr;
}
//in main
int i,nr,nrmax=0;
for(i=1;i<=n;i++)
if(viz[i]==0){
nr=bf_nr(i);
if(nr>nrmax)
nrmax=nr;
}
cout<<“nr. max:"<<nrmax<<endl;
![Page 145: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/145.jpg)
Reguli - Olimpiada de Informatică etapa pe sector 2013
Ionuţ a cumpărat un joc format din componentele necesare
asamblării unui obiect. A studiat prospectul jocului în care sunt
precizate etapele pe care trebuie să le urmeze pentru o asamblare
corectă a obiectului. Ionuţ a observat că nu este dată ordinea exactă
a etapelor, ci se precizează ce etape de asamblare trebuie realizate
înaintea altora. Ionuţ trebuie să asambleze obiectul în n etape,
numerotate de la 1 la n, respectând regulile de asamblare prevăzute
în prospect. Astfel, daca sunt trei etape şi etapa 2 trebuie efectuată
neapărat înaintea etapei 3, atunci o ordine corectă a etapelor poate
fi: 1, 2, 3, sau 2, 1, 3, sau 2, 3, 1.
Cerinţă
Scrieţi un program care, cunoscând numărul de etape şi regulile de
succesiune între aceste etape, determină o succesiune corectă de
etape prin care să se respecte regulile de asamblare din prospect.
![Page 146: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/146.jpg)
reguli.in
6 8 - numărul de etape și numărul de reguli
4 2
5 4
3 5
1 5
1 6
6 2
3 2
5 2
3 5 4
6
12
![Page 147: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/147.jpg)
o Întâi planificăm etapele care nu depind de alte
etape
o Modelăm problema cu grafuri
– întâi considerăm vârfurile cu grad interior 0
![Page 148: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/148.jpg)
o Întâi planificăm etapele care nu depind de alte
etape
o Modelăm problema cu grafuri
– întâi considerăm vârfurile cu grad interior 0
- eliminăm aceste vârfuri
![Page 149: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/149.jpg)
o Întâi planificăm etapele care nu depind de alte
etape
o Modelăm problema cu grafuri
– întâi considerăm vârfurile cu grad interior 0
- eliminăm aceste vârfuri
- reluăm procedeul
![Page 150: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/150.jpg)
o Observații
- Vârfurile nu trebuie eliminate, ci doar scăzute
gradele interne ale vecinilor
- La un pas pot deveni vârfuri cu grad intern 0 doar
acele vârfuri în care intrau arce cu o extremitate în
vârfuri eliminate la pasul anterior
- Implementare – similară cu BF
![Page 151: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/151.jpg)
3 5 4
6
12
![Page 152: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/152.jpg)
3 5 4
6
12
C: 1 3
![Page 153: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/153.jpg)
3 5 4
6
12
C: 1 3
![Page 154: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/154.jpg)
3 5 4
6
2
C: 1 3
![Page 155: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/155.jpg)
3 5 4
6
2
C: 1 3 6
![Page 156: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/156.jpg)
3 5 4
6
2
C: 1 3 6
![Page 157: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/157.jpg)
3 5 4
6
2
C: 1 3 6
![Page 158: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/158.jpg)
5 4
6
2
C: 1 3 6
![Page 159: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/159.jpg)
5 4
6
2
C: 1 3 6 5
![Page 160: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/160.jpg)
5 4
6
2
C: 1 3 6 5
![Page 161: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/161.jpg)
5 4
2
C: 1 3 6 5
![Page 162: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/162.jpg)
5 4
2
C: 1 3 6 5
![Page 163: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/163.jpg)
5 4
2
C: 1 3 6 5
![Page 164: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/164.jpg)
4
2
C: 1 3 6 5
![Page 165: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/165.jpg)
4
2
C: 1 3 6 5 4
![Page 166: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/166.jpg)
4
2
C: 1 3 6 5 4
![Page 167: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/167.jpg)
2
C: 1 3 6 5 4
![Page 168: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/168.jpg)
2
C: 1 3 6 5 4 2
![Page 169: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/169.jpg)
2
C: 1 3 6 5 4 2
![Page 170: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/170.jpg)
C: 1 3 6 5 4 2
![Page 171: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/171.jpg)
3 5 4
6
12
Sortare topologică: 1 3 6 5 4 2
![Page 172: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/172.jpg)
#include<fstream>
using namespace std;
ifstream f("reguli.in");
ofstream g("reguli.out");
int a[100][100],x,y,n, gin[100],r,i,j;
//gin[i]=grad intern al lui i
int main(){
int c[100],p,u;
f>>n>>r;
//construim matricea de adiacenta coresp. regulilor
for(i=1;i<=r;i++){
f>>x>>y;
a[x][y]=1;
gin[y]++;
}
![Page 173: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/173.jpg)
//adaugam toate elementele cu grad intern 0 in coada c
p=0;u=-1;
for(i=1;i<=n;i++)
if(gin[i]==0)
{
u++; c[u]=i;
}
![Page 174: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/174.jpg)
/* extragem un element de grad 0 din coada,
il adaugam in solutie si il eliminam din graf = scadem
cu 1 gradul intern al vecinilor sai;
Daca se obtin astfel varfuri de grad intern 0, le
adaugam in coada c */
while(p<=u){
x=c[p]; p++;
g<<x<<" ";
for(j=1;j<=n;j++)
if(a[x][j]==1){
gin[j]--;
if(gin[j]==0){
u++;
c[u]=j;
}
}
}
Sursa: 8_Ionut_Sortare_topologica.cpp
![Page 175: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/175.jpg)
/* extragem un element de grad 0 din coada,
il adaugam in solutie si il eliminam din graf = scadem
cu 1 gradul intern al vecinilor sai;
Daca se obtin astfel varfuri de grad intern 0, le
adaugam in coada c */
while(p<=u){
x=c[p]; p++;
g<<x<<" ";
for(j=1;j<=n;j++)
if(a[x][j]==1){
gin[j]--;
if(gin[j]==0){
u++;
c[u]=j;
}
}
}
Sursa: 8_Ionut_Sortare_topologica.cpp
![Page 176: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/176.jpg)
Temă
1. Modificați programul astfel încât graful să fie
memorat cu liste de adiacență
2. Modificați programul astfel încât să fie
detectată existența de circuite (date incorecte –
dependențe circulare)
![Page 177: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/177.jpg)
Varianta 2 – folosim parcurgerea în adâncime DF
o Cu cât un vârf este finalizat (explorat cu toate
vârfurile accesibile din el) mai târziu în
parcurgerea DF, cu atât el este mai la început în
ordonare (în sortarea topologică)
o Adăugăm într-o stivă vârfurile, pe măsura terminării
explorării lor (adică explorării tuturor vecinilor)
o Eliminăm vârfurile din stivă pe rând și le afișăm
![Page 178: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/178.jpg)
Temă – admitere 2016
b) Să se determine și să se afișeze membrii celei mai mari submulțimi
de utilizatori, cu proprietatea că fiecare utilizator din această
submulțime are cel puțin k prieteni aflați la rândul lor în submulțime.
În cazul în care nu există o astfel de submulțime pentru k dat,
răspunsul va fi cuvântul NU.
b) ⇔ determinarea unui subgraf cu toate nodurile de grad ≥ k
Idee - similară cu cea de la sortarea topologică: eliminăm
succesiv noduri cu grad< k
2
9
3
4
8
7
5
6
10k=2
k=31
![Page 179: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/179.jpg)
Temă – admitere 2016
b) Să se determine și să se afișeze membrii celei mai mari submulțimi
de utilizatori, cu proprietatea că fiecare utilizator din această
submulțime are cel puțin k prieteni aflați la rândul lor în submulțime.
În cazul în care nu există o astfel de submulțime pentru k dat,
răspunsul va fi cuvântul NU.
b) ⇔ determinarea unui subgraf cu toate nodurile de grad ≥ k
Idee - similară cu cea de la sortarea topologică: eliminăm
succesiv noduri cu grad< k
2
9
3
4
8
7
5
6
10k=2
k=31
![Page 180: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/180.jpg)
Temă – Ieșire din labirint.
Se dă un labirint sub forma unei matrice nxn cu elemente 0 și 1, 1
semnificând perete (obstacol) iar 0 celula liberă. Prin labirint ne putem
deplasa doar din celula curentă într-una din celulele vecine (N,S,E,V) care
sunt libere. Dacă ajungem într-o celulă liberă de la periferia matricei
(prima sau ultima linie/coloană) atunci am găsit o ieșire din labirint. Date
două coordonate x și y, să se decidă dacă există un drum din celula (x,y)
prin care se poate ieși din labirint. În caz afirmativ să se afișeze un drum
minim către ieșire.
1 1 1 1 0 1
0 0 1 0 0 0
1 0 0 0 1 1
1 1 0 0 0 1
0 0 1 1 0 1
1 1 1 1 1 1
start = (3,3)
1 1 1 1 0 1
0 0 1 0 0 0
1 0 0 0 1 1
1 1 0 0 0 1
0 0 1 1 0 1
1 1 1 1 1 1
Sursa: 9_BF_matrice.cpp
![Page 181: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/181.jpg)
Temă – Ieșire din labirint.
Se dă un labirint sub forma unei matrice nxn cu elemente 0 și 1, 1
semnificând perete (obstacol) iar 0 celula liberă. Prin labirint ne putem
deplasa doar din celula curentă într-una din celulele vecine (N,S,E,V) care
sunt libere. Dacă ajungem într-o celulă liberă de la periferia matricei
(prima sau ultima linie/coloană) atunci am găsit o ieșire din labirint. Date
două coordonate x și y, să se decidă dacă există un drum din celula (x,y)
prin care se poate ieși din labirint. În caz afirmativ să se afișeze un drum
minim către ieșire.
int deplx[]={-1,1,0,0}; //initializare pentru avansare
int deply[]={0,0,-1,1};
//vecinii celulei x,y:
for(int i=0;i<4;i++){
vx = x + deplx[i];
vy = y + deply[i];
}
Sursa: 9_BF_matrice.cpp
![Page 182: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/182.jpg)
Între participanții la un curs s-au legat relații de
prietenie și comunică și în afara cursului.
Profesorul vrea să transmită un mesaj participanților și
știe ce relații de prietenie s-au stabilit între ei. El vrea
să contacteze cât mai puțini participanți, urmând ca
aceștia să transmită mesajul între ei.
Ajutați-l pe profesor să decidă cui trebuie să transmită
inițial mesajul și să atașeze la mesaj o listă în care să
arate fiecărui participant către ce prieteni trebuie să
trimită mai departe mesajul, astfel încât mesajul să
ajungă la fiecare participant la curs o singură dată.
![Page 183: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/183.jpg)
1
2
9
3
4
8
7
5
6
10
12
11
![Page 184: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/184.jpg)
1
2
9
3
4
8
7
5
6
1
6
93
4 87
5
2
10
12
11
10
11 12
Mesajul poate fi trimis lui 1 și 10 și urmează traseele:
![Page 185: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/185.jpg)
Idee – modelăm problema cu un graf neorientat
◦ cui trebuie să transmită inițial mesajul = câte un vârf din fiecare componentă conexă
for(i=1;i<=n;i++)
if(viz[i]==0){
bf(i);
cout<<i<<‘ ‘;
}
![Page 186: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/186.jpg)
Idee – modelăm problema cu un graf
◦ Traseul mesajului în fiecare componentă = lista de fii
pentru arborele bf memorat în vectorul tata (câte un
arbore pentru fiecare componentă)
- vezi programul pentru conversia de la vectorul
tata la lista de fii
![Page 187: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/187.jpg)
![Page 188: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/188.jpg)
Se vizitează
- Inițial: vârful de start s - devine vârf curent
La un pas:
se trece la primul vecin nevizitat al vârfului curent,
dacă există
altfel
se merge înapoi pe drumul de la s la vârful curent,
până se ajunge la un vârf cu vecini nevizitați
se trece la primul dintre aceștia și se reia procesul
![Page 189: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/189.jpg)
Se vizitează
- Inițial: vârful de start s - devine vârf curent
- La un pas:
se trece la primul vecin nevizitat al vârfului curent,
dacă există
altfel
se merge înapoi pe drumul de la s la vârful curent,
până se ajunge la un vârf cu vecini nevizitați
se trece la primul dintre aceștia și se reia procesul
![Page 190: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/190.jpg)
Se vizitează
- Inițial: vârful de start s - devine vârf curent
- La un pas:
se trece la primul vecin nevizitat al vârfului curent,
dacă există
altfel
• se merge înapoi pe drumul de la s la vârful curent,
până se ajunge la un vârf cu vecini nevizitați
• se trece la primul dintre aceștia și se reia procesul
![Page 191: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/191.jpg)
Se vizitează
- Inițial: vârful de start s - devine vârf curent
- La un pas:
se trece la primul vecin nevizitat al vârfului curent,
dacă există
altfel
• se merge înapoi pe drumul de la s la vârful curent,
până se ajunge la un vârf cu vecini nevizitați
• se trece la primul dintre aceștia și se reia procesul
![Page 192: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/192.jpg)
1
2
9
3
4
8
7
5
6
![Page 193: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/193.jpg)
1
2
9
3
4
8
7
5
6
1
![Page 194: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/194.jpg)
1
2
9
3
4
8
7
5
6
1
3
![Page 195: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/195.jpg)
1
2
9
3
4
8
7
5
6
1
3
2
![Page 196: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/196.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
2
![Page 197: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/197.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
2
![Page 198: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/198.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
8
2
![Page 199: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/199.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
8
2
![Page 200: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/200.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
8
2
![Page 201: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/201.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
8
7
2
![Page 202: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/202.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
8
7
2
![Page 203: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/203.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
8
7
2
![Page 204: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/204.jpg)
1
2
9
3
4
8
7
5
6
1
9
3
4
8
7
2
![Page 205: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/205.jpg)
1
2
9
3
4
8
7
5
6
1
6
9
3
4
8
7
2
![Page 206: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/206.jpg)
1
2
9
3
4
8
7
5
6
1
6
9
3
4
8
7
2
![Page 207: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/207.jpg)
1
2
9
3
4
8
7
5
6
1
6
9
3
4
8
7
2
![Page 208: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/208.jpg)
1
2
9
3
4
8
7
5
6
1
6
9
3
4
8
7
5
2
![Page 209: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/209.jpg)
1
2
9
3
4
8
7
5
6
1
6
9
3
4
8
7
5
2
![Page 210: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/210.jpg)
1
2
9
3
4
8
7
5
6
1
6
9
3
4
8
7
5
2
![Page 211: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/211.jpg)
void df(int i){
viz[i]=1;
cout<<i<<" ";
for(int j=1;j<=n ;j++)
if(a[i][j]==1)
if(viz[j]==0){
tata[j]=i;
df(j);
}
}
Apel:
df(s)
![Page 212: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/212.jpg)
void df(int i){
viz[i]=1;
cout<<i<<" ";
for(int j=1;j<=n ;j++)
if(a[i][j]==1)
if(viz[j]==0){
tata[j]=i;
df(j);
}
}
Apel:
df(s)
![Page 213: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/213.jpg)
void df(int i){
viz[i]=1;
cout<<i<<" ";
for(int j=1;j<=n ;j++)
if(a[i][j]==1)
if(viz[j]==0){
tata[j]=i;
df(j);
}
}
Apel:
df(s)
![Page 214: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/214.jpg)
void df(int i){
viz[i]=1;
cout<<i<<" ";
for(int j=1;j<=n ;j++)
if(a[i][j]==1)
if(viz[j]==0){
tata[j]=i;
df(j);
}
}
Apel:
df(s)
![Page 215: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/215.jpg)
void df(int i){
viz[i]=1;
cout<<i<<" ";
for(int j=1;j<=n ;j++)
if(a[i][j]==1)
if(viz[j]==0){
tata[j]=i;
df(j);
}
}
Apel:
df(s)
![Page 216: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/216.jpg)
Dat un graf neorientat, să se verifice dacă
graful conține cicluri și, în caz afirmativ,
să se afișeze un ciclu al său
![Page 217: Facultatea de Matematică și Informatică Lecții de ...fmi.unibuc.ro/ro/pdf/2019/admitere/licenta/FMI_Grafuri_2019.pdf · Graf neorientat: G = (V, E) vârf (nod), muchie gradul](https://reader033.vdocuments.pub/reader033/viewer/2022050718/5e18676cf5293543c21c6e4d/html5/thumbnails/217.jpg)
Succes la examenul de admitere!