Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator Nr.3
la Matematica Discreta
Tema:Algoritmul de cautare in largime
A efectuat:
st. gr. TI
A verificat:
lect.univ.
Ceban G.
Chiinu 2015
Scopul lucrrii:
Enuntul problemei:
1. Elaborai procedura care va realiza algoritmul de parcurgere a grafului n lrgime;
2. Folosind procedurile din lucrrile precedente, elaborai programul care va permite::
introducerea grafului n calculator,
parcurgerea grafului n largime,
vizualizarea rezultatelor la display i imprimant.
Listingul programului:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct list
{
int info;
struct list *adr;
}list;
list* pushList(list *prev_el, list *&head_el, int inf);
list** saveList(int n, list **adi_list);
void viewList(int n, list **adi_list);
list* popList(list *curr_el);
int* parLatime(int n, int v_st, list **adi_list, int *vect_res, int &k);
void cleanMem(int n, list **adi_list);
int main()
{
list **adi_list, *tmp_list;
int n, *vect_res, v_st, i, k, opt;
FILE *fp;
printf("Introduceti numarul de virfuri: ");
scanf("%d", &n);
adi_list = saveList(n, adi_list);
system("cls");
do
{
system("cls");
printf(" Parcurgerea grafului in largime
\n");
printf("------------------------------------------\n");
printf(" 1.Afisarea listei de adiacenta
\n");
\n");
printf(" 0.Iesire
\n");
v_st = next_el->info;
k++;
}else{
v_st = next_el->info;
}
if(next_el->adr != 0)
next_el = next_el->adr;
else
break;
}
if(head_el->adr != 0)
{
head_el = popList(head_el);
if(head_el != 0)
v_st = head_el->info;
else
v_st = 0;
}
if(v_st == 0)
{
for(i = 0; i < n; i++)
{
v_con = 0;
j = 0;
do
{
if(vect_res[j] == i + 1)
{
v_con = 1;
break;
}
j++;
}while(j < k);
if(v_con == 0)
{
v_st = i + 1;
break;
}
}
}
}while(k != n);
return vect_res;
}
//Functia pentru stergerea unui element din lista
list* popList(list *head_el)
{
list *tmp;
tmp = head_el;
if(head_el->adr == 0)
head_el = 0;
else
head_el = head_el->adr;
free(tmp);
return head_el;
}
//Eliberarea memoriei dinamice ocupate de toate elementele programului
void cleanMem(int n, list **adi_list)
{
int i;
list *curr_el, *prev_el;
for(i = 0; i < n; i++)
{
curr_el = adi_list[i];
while(curr_el != 0)
{
//prev_el = curr_el;
prev_el = curr_el->adr;
free(curr_el);
curr_el = prev_el;
}
}
free(adi_list);
Concluzie:
6
In acest laborator a fost efectuat un porgram care pastreaza un graf in forma de lista de
adiacenta.Pentru aceasta a fost folosit un vector de pointeri si fiecare pointer pastreaza adresa
primului element dintr-o lista simplu inlantuita. Dupa introducerea si memorarea listei a fost
elaborat un algoritm care permite afisarea drumului in largime incepind cu virful introdus de
utilizator. In final programul ne permite posibilitate visuzlizarii rezultatelor nu numai la ecran
dar si salvarea intr-un fisier.