Sunteți pe pagina 1din 4

Ministerul Educaţiei

al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT
despre lucrarea de laborator Nr. 2
la Matematica speciala

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

A efectuat:
st. gr. RM-201 Grosu Maxim

A verificat:
Lector univ. Gorban Maria

Chişinău – 2021
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.  
.

Parcurgerea în lăţime
Parcurgerea în lățime 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.

Parcurgerea în adâncime
Parcurgerea în adâncime 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

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;
}

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