RAPORT
Chişinău – 20XX
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;
ÎNTREBĂRI DE CONTROL
1. Definiţi structurile principale de date: liste, fire de aşteptare,
stive, arbori.
1)Lite - O listă este o colecție de elemente de informație (noduri),
legate între ele prin referințe, realizându-se, astfel, o stocare
necontiguă a datelor în memorie. Lungimea unei liste este dată de
numărul de noduri din listă.
2)Stive - O stivă este o structură de date ale cărei elemente sunt
considerate a fi puse unul peste altul, astfel încât orice element
adăugat se pune în vârful stivei, iar extragerea unui element se
poate face numai din vârful acesteia, în ordinea inversă celei în care
elementele au fost introduse.
3)Arbore - În teoria grafurilor, un arbore este un graf neorientat,
conex și fără cicluri. Arborii reprezintă grafurile cele mai simple ca
structură din clasa grafurilor conexe, ei fiind și cei mai frecvent
utilizați în practică.
4)Fire de aşteptare - Aşteptarea este intervalul de timp între
momentul când a fost solicitată servirea şi începutul efectuării
acesteia într-un sistem de servire. Universalitatea acestui proces şi
creşterea gradului de complexitate au condus la studiul analitic al
fenomenelor de aşteptare în vederea proiectării cât mai eficiente a
sistemelor de servire. Un sistem de servire este considerat eficient
dacă i se asigură un grad ridicat de utilizare, iar servirea se
realizează cu un timp minim de aşteptare.
2. Care sunt operaţiile definite pentru aceste structuri de date?
O structură de date bine concepută permite efectuarea unei
varietăți de operații de bază, utilizând puține resurse (ca de
exemplu memoria necesară și timpul de execuție). Structurile de
date se implementează utilizând tipuri de date, referințe și operații
asupra acestora, toate facilitate de către un limbaj de programare.
4. Definiţi noţiunea de parcurgere a grafului în adâncime/lărgime.
Parcurgerea în adâncime este un algoritm pentru parcurgerea sau
căutarea într-o structură de date de tip arbore(d) sau graf(d). Se
începe de la rădăcină(d) și se explorează cât mai mult posibil de-a
lungul fiecărei ramuri înainte de a face pași înapoi.
Parcurgerea în lățime - este un algoritm de căutare în graf, în care,
atunci când se ajunge într-un nod oarecare v, nevizitat, se vizitează
toate nodurile nevizitate adiacente lui v, apoi toate vârfurile
nevizitate adiacente vârfurilor adiacente lui v, etc. Plecand dintr-un
nod se va parcurge doar componenta conexă din care acesta face
parte. Pentru grafuri cu mai multe componente conexe se vor obține
mai mulți arbori de acoperire.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#include <math.h>
int main(void) {
int **graf;
int peak;
int var;
printf("Dati numarul de varfuri a grafului : ");
scanf("%d", &peak);
for(int i=0; i<peak; i++)
{
array1[i] = 0;
array2[i] = 0;
a[i] = 0;
}
graf = memory1(peak);
printf("Selectati metoda de introducere a grafului: \n");
printf("1. Matrice adiacenta\n");
printf("2. Lista adiacenta\n");
scanf("%d", &var);
switch(var)
{
case 1:
adjancecymatrix(graf,peak);
break;
case 2:
adjacentlist(graf,peak);
break;
default:
printf("Eroare!\n");
int z;
}
int var2;
printf("\n\n");
printf("Selectati operatiunea de executare asupra grafului\n");
printf("1 - Parcurgerea grafului in adancime\n");
printf("2 - Parcurgerea grafului in largime\n");
scanf("%d", &var2);
switch(var2)
{
case 1:
if(var==2)
{
listmatrix(graf,peak);
}
printf("Graful parcurs in adancime: ");
deep(graf,peak,0);
printf("\n");
break;
case 2:
if(var==2)
{
listmatrix(graf,peak);
}
width(graf,peak,0);
showwidth(graf,peak);
printf("\n");
break;
printf("X%d\t", i+1);
for(int j=0; j<peak; j++)
{
printf("%d\t", graf[i][j]);
if(graf[i][j]==0)
{
break;
}
}
printf("\n");
}
}