Sunteți pe pagina 1din 5

Ministerul Educaţiei

al Republicii Moldova

Universitatea Tehnică a Moldovei


Catedra Calculatoare și rețele

RAPORT
despre lucrarea de laborator Nr. 2
la Matematica speciala

Tema: Parcurgerea grafului în adîncime și lărgime

A efectuat:
st. gr. CR-191 Trifan Petru

A verificat:
Lector univ. Lisnic Inga

Chişinău – 2020
SCOPUL LUCRĂRII:

  Studierea algoritmului de căutare  în lărgime și adîncime


  Elaborarea programului de căutare în lărgime și adîncime.  

SARCINA DE BAZĂ
1.     Elaboraţi procedura care va realiza algoritmul de parcurgere a grafului în lărgime și adîncime;
2.     Folosind procedurile din lucrările precedente, elaboraţi programul care va permite:

  introducerea grafului în calculator;

  parcurgerea grafului în lărgime și adîncime;

  extragerea datelor la display şi printer.

ÎNTREBĂRI DE CONTROL
1.     În ce constă parcurgerea arborelui şi a grafului în lărgime și adîncime?
2.     Care este diferenţa dintre parcurgerea în lărgime a unui arbore şi a unui graf arbitrar?
3.     Ce fel de structuri de date se vor utiliza în algoritmul de căutare în lărgime și adîncime?
4.     Exemplificaţi algoritmul căutării în lărgime și adîncime.

1.

Parcurgerea în lăţime
Parcurgerea în lățime (Breadth-first Search - BFS) presupune vizitarea nodurilor în următoarea
ordine:
 nodul sursă (considerat a fi pe nivelul 0)
 vecinii nodului sursă (aceștia constituind nivelul 1)
 vecinii încă nevizitați ai nodurilor de pe nivelul 1 (aceștia constituind nivelul
2)
 vecinii încă nevizitați ai nodurilor de pe nivelul 2
 s.a.m.d.
Caracteristica esențială a acestui tip de parcurgere este, deci, că se preferă explorarea în lățime,
a nodurilor de pe același nivel (aceeași depărtare față de sursă) în detrimentul celei în adâncime,
a nodurilor de pe nivelul următor.
Parcurgerea în adâncime
Parcurgerea în adâncime (Depth-First Search - DFS) presupune explorarea nodurilor în
următoarea ordine:
 nodul sursă
 primul vecin nevizitat al nodului sursă (îl vom numi V1)
 primul vecin nevizitat al lui V1 (îl vom numi V2)
 primul vecin nevizitat al lui V2
 s.a.m.d.
 în momentul în care am epuizat vecinii unui nod Vn, continuăm cu următorul
vecin nevizitat al nodului anterior, Vn-1
Așadar, spre deosebire de BFS, acest tip de parcurgere pune prioritate pe explorarea în
adâncime (la distanțe tot mai mari față de nodul sursă), în detrimentul celei în lățime (pe
același nivel).

Codul programului:
#include<stdio.h>
#include<conio.h>

int mA[20][20];
int vizitat[20];
int coada[20];
int i,n,m,j,pl,x,y,u;

void DFS( int pl)


{
int j;

printf("%d",pl);
vizitat[pl]=1;
for(j=1;j<=n;j++)
{
if((mA[pl][j]==1) && (vizitat[j]==0))
{
DFS(j);
}
}

void BFS (int i)


{
for(j=1;j<=n;j++)
{
if((mA[i][j]==1)&&(vizitat[j]==0))
{
u=u+1;
coada[u]=j;
vizitat[j]=1;
}
}
if(i<=u)
BFS(i+1);

int main()
{
for(i=1;i<=n;i++)
{
vizitat[i]=0;
}
printf("Da-ti nodul din care doriti sa incepti parcurgerea\r\n");
scanf("%d",&pl);
printf("Dati nr de noduri\r\n"); scanf("%d",&n);
printf("Da-ti nr de arce\r\n"); scanf("%d",&m);
printf("Da-ti arcele\r\n");
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
mA[x][y]=1; mA[y][x]=1;
}
printf("Pa-");
DFS(pl); printf("\r\n");
for(i=1;i<=n;i++)
{
vizitat[i]=0;
}
vizitat[pl]=1;
coada[1]=pl;
u=1;
BFS(1);
printf("Pl-");
for(i=1;i<=n;i++)
{
printf("%d",coada[i]);
}
return 0;
}
Concluzie:
La lucrarea de laborator cu tema:” Parcurgerea grafului in largime si
adincime.”,am studiat algoritmii de căutare în graf şi diferite forme de păstrare şi
prelucrare a datelor, am elaborat proceduri de căutare în adâncime si  lărgime.

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