Documente Academic
Documente Profesional
Documente Cultură
2
TEMA: ALGORITMUL DE CĂUTARE ÎN ADÂNCIME ȘI
LĂRGIME
1. SCOPUL LUCRĂRII:
Studierea algoritmilor de căutare în graf şi a diferitor forme de păstrare şi
prelucrare a datelor.
Elaborarea procedurii de căutare în adâncime și lărgime.
PREZENTAREA LUCRĂRII:
3. SARCINA DE BAZĂ
1. Elaboraţi procedura căutării în adâncime și lărgime într-un graf arbitrar;
2. Elaboraţi un program cu următoarele posibilităţi:
introducerea grafului în calculator,
parcurgerea grafului în adâncime,
vizualizarea rezultatelor.
4. ÎNTREBĂRI DE CONTROL
1. Definiţi structurile principale de date: liste, fire de aşteptare, stive, arbori.
2. Care sunt operaţiile definite pentru aceste structuri de date?
3. Care este principiul de organizare a prelucrării elementelor în firele de aşteptare şi în stive?
4. Definiţi noţiunea de parcurgere a grafului în adâncime/lărgime.
5. Ce fel de structuri de date se vor utiliza în căutarea în adâncime/lărgime?
6. Exemplificaţi utilizarea algoritmului de căutare în adâncime/lărgime.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {
int i, j, k, l, n, s, x, y, h;
char ch;
int a[50][50];
int b[50];
printf("Introduceti numarul de virfuri ale arborelui : ");
scanf("%d", & n);
printf("\nLista de adiacenta :\n\n ");
for (i = 0; i < n; i++) {
printf("\n%d|", i + 1);
scanf("%d", & a[i][0]);
for (j = 1; j < n + 1; j++)
if (a[i][j - 1] != 0)
scanf("%d", & 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\n");
printf("Parcurgerea in largime(D-S) :\n\n");
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!");
//-------------------------------
l4: printf("\n\n\n\r");
printf("Parcurgerea in adancime(D-S):\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(" %d,", 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(" %d,", 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");
}
}