Documente Academic
Documente Profesional
Documente Cultură
Mat Discreta 2-3
Mat Discreta 2-3
RAPORT
Lucrare de laborator Nr.2 si 3
la Matematica Discret
A efectuat:
A verificat:
Chiinu 2014
Cutare n adncime
La cutarea n adncime (parcurgerea unui graf n sens direct, n preordine) vrfurile grafului vor fi vizitate n
conformitate cu urmtoarea procedur recursiv:
mai nti va fi vizitat rdcina arborelui q, apoi, dac rdcina arborelui nu este frunz - pentru fiecare fiu
p al rdcinii q ne vom adresa recursiv procedurii de parcurgere n adncime pentru a vizita vrfurile tuturor
subarborilor cu rdcina p ordonate ca fii ai lui q.
3. SARCINA DE BAZ
1. Elaborai procedura cutrii n adncime ntr-un graf arbitrar;
2. Elaborai un program cu urmtoarele posibiliti:
Listingul programului:
#include <conio.h>
#include <stdlib.h>
#include <stdlib.h>
int main()
{
int i,j,k,l,n,s,x,y,h;
char ch;
for(i=0;i<n;i++)
{
printf("\r%2i|",i+1);
scanf("%i",&a[i][0]);
for(j=1;j<n+1;j++)
if(a[i][j-1]!=0) scanf("%i",&a[i][j]);
else break;}
for(i=0;i<n;i++) b[i]=i+1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]!=0)
if(b[a[i][j]-1]!=0&&0<a[i][j]&&a[i][j]<=n) b[a[i][j]-1]=0;
else goto l2; // Eror!
else break;
for(i=0,x=0;x<n;x++)
if(b[x]!=0) {b[0]=x+1; i++;}
if(i>1) goto l2; // Eror!
x=y=0;
printf("\n\n\r");
printf("*************************\n\n\n");
printf("Parcurgerea in largime :\n\r");
printf("\n %d,",b[0]);
for(i=1;i<n;i++)
{ if(a[b[x]-1][y]==0) {x++; y=0; i--;}
else {b[i]=a[b[x]-1][y]; y++;
printf(" %d,",b[i]);
if(i%15==0) printf("\n");
}
}
goto l4;
l2:printf("\n\n\t\t\t");
printf("Eroare!");
goto l3;
l4:printf("\n\n\n\r");
printf("*************************\n\n\n");
printf("Rezultatul parcurgerii in adincime:\n");
i=b[0]-1;j=s=h=0;
printf("\n %d,",b[0]);
while(h<n-1)
{k=i;
if(a[k][j]!=0)
{ printf(" %i,",a[k][j]);
i=a[k][j]-1;
}
l1:if(a[k][j]==0)
{ if(s==0)l=k+1;
if(s==1)l=x+1;
for(x=0;x<n;x++)
for(y=0;y<n+1;y++)
{ if(a[x][y]==l&&a[x][y+1]!=0)
{ printf(" %i,",a[x][y+1]);
i=a[x][y+1]-1;
s=0;
goto l5; }
if(a[x][y]==l&&a[x][y+1]==0)
{ s=1;goto l1;}
}
}
l5:h++;
if(h%15==0) printf("\n");
}
l3:
printf("\n\n\n");
printf("*************************");
printf("\n\n\n");
Graful introdus:
Rezultatele obtinute:
Concluzie:
Cautarea in largime si in adincime in arbori duce la vizitarea tuturor virfurilor acestuia
depistind nodul solicitat insa in ordine diferita ceea ce duce la aplicarea in practica a
celei mai eficiente metode pentru fiecare caz in parte