Sunteți pe pagina 1din 8

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra: Automatica i Tehnologii Informaionale

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:

Studierea algoritmului de cautare in largime.


Elaborarea programului de cautare in largime.

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");

printf(" 2.Pracurgerea in largime

\n");

printf(" 0.Iesire

\n");

printf(" Alegeti optiunea dorita: ");


opt = getche();
switch(opt)
{
case '1':
printf("\nLista de adiacenta: \n");
viewList(n, adi_list);
printf("\n\nApasati orice tasta pentru revenire...");
getch();
system("cls");
break;
case '2':
printf("\n");
viewList(n, adi_list);
printf("Introduceti virful de pornire: ");
scanf("%d", &v_st);
vect_res =

(int *)malloc(n * sizeof(int));

vect_res = parLatime(n, v_st, adi_list, vect_res, k);


printf("Parcurgerea in latime incepind cu virful %d: ", vect_res[0]);
for(i = 0; i < k; i++)
printf("%d ", vect_res[i]);
printf("\n\nApasati orice tasta pentru revenire...");
free(vect_res);
getch();
break;
default:
cleanMem(n, adi_list);
}
}while(opt != '0');
return 0;
}
//Functia pentru adaugarea unui element intr-o lista

list* pushList(list *prev_el, list *&head_el, int inf)


{
list *tmp = (list *)malloc(sizeof(list));
tmp->info = inf;
tmp->adr = 0;
if(prev_el == 0)
head_el = tmp;
else
prev_el->adr = tmp;
prev_el = tmp;
return prev_el;
}
//Functia pentru introducerea listei de adiacenta
list** saveList(int n, list **adi_list)
{
int i, inf;
list *prev_el, *head_el;
adi_list = (list **)malloc(n * sizeof(list *));
for(i = 0; i < n; i++)
{
prev_el = head_el = 0;
printf("%d |", i + 1);
do
{
scanf("%d", &inf);
prev_el = pushList(prev_el, head_el, inf);
}while(inf != 0);
adi_list[i] = head_el;
}
return adi_list;
}
//Functia pentru afisarea listei de adiacenta
void viewList(int n, list **adi_list)
{
int i;
list *curr_el;
for(i = 0; i < n; i++)
{
curr_el = adi_list[i];

printf("%d |", i + 1);


while(curr_el != 0)
{
printf("%d ", curr_el->info);
curr_el = curr_el->adr;
}
printf("\n");
}
}
//Functia pentru parcurgerea in largime
int* parLatime(int n, int v_st, list **adi_list, int *vect_res, int &k)
{
int i, j, v_con, n_line;
list *next_el, *head_el, *stack_el;
next_el = head_el = stack_el = 0;
if(v_st == 0)
return 0;
k = 0;
j = 0;
do
{
next_el = adi_list[v_st - 1];
while(v_st != 0)
{
v_con = 0;
i = 0;
while(i < k)
{
if(v_st == vect_res[i])
{
v_con = 1;
break;
}
i++;
}
if(v_con == 0)
{
stack_el = pushList(stack_el, head_el, v_st);
vect_res[k] = v_st;

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.

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

  • Laboratorul 3 Matlab Utm Varianta 10
    Laboratorul 3 Matlab Utm Varianta 10
    Document9 pagini
    Laboratorul 3 Matlab Utm Varianta 10
    Fernando Epic Costa
    Încă nu există evaluări
  • BDClab 9
    BDClab 9
    Document11 pagini
    BDClab 9
    Alexandru Dumbrava
    Încă nu există evaluări
  • SI Examen
    SI Examen
    Document13 pagini
    SI Examen
    Alexandru Dumbrava
    Încă nu există evaluări
  • RC Lab1.1
    RC Lab1.1
    Document17 pagini
    RC Lab1.1
    Alexandru Dumbrava
    Încă nu există evaluări
  • Plan de Afaceri 2.0
    Plan de Afaceri 2.0
    Document7 pagini
    Plan de Afaceri 2.0
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lab 3 BDC
    Lab 3 BDC
    Document9 pagini
    Lab 3 BDC
    Alexandru Dumbrava
    Încă nu există evaluări
  • BDC Lab8
    BDC Lab8
    Document36 pagini
    BDC Lab8
    Tudor Munteanu
    Încă nu există evaluări
  • Lab#1 PR
    Lab#1 PR
    Document5 pagini
    Lab#1 PR
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lucrarea de Curs
    Lucrarea de Curs
    Document26 pagini
    Lucrarea de Curs
    Alexandru Dumbrava
    Încă nu există evaluări
  • Mecanica Laborator 1
    Mecanica Laborator 1
    Document7 pagini
    Mecanica Laborator 1
    Alexandru Dumbrava
    Încă nu există evaluări
  • ACSO Raspuns 1 25
    ACSO Raspuns 1 25
    Document6 pagini
    ACSO Raspuns 1 25
    Alexandru Dumbrava
    Încă nu există evaluări
  • Elect Lab1
    Elect Lab1
    Document6 pagini
    Elect Lab1
    Alexandru Kirika
    Încă nu există evaluări
  • Elect Lab1
    Elect Lab1
    Document6 pagini
    Elect Lab1
    Alexandru Fiodor
    Încă nu există evaluări
  • Lucrare de Laborator Nr1 Sisteme Multimedia
    Lucrare de Laborator Nr1 Sisteme Multimedia
    Document11 pagini
    Lucrare de Laborator Nr1 Sisteme Multimedia
    Ion Stratan
    Încă nu există evaluări
  • ACSO Raspun 51 75
    ACSO Raspun 51 75
    Document10 pagini
    ACSO Raspun 51 75
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laborator 6 AC
    Laborator 6 AC
    Document6 pagini
    Laborator 6 AC
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lab1 Electronica
    Lab1 Electronica
    Document6 pagini
    Lab1 Electronica
    Alexandru Dumbrava
    Încă nu există evaluări
  • Raspunsuri Electronica
    Raspunsuri Electronica
    Document6 pagini
    Raspunsuri Electronica
    Alexandru Dumbrava
    100% (1)
  • Laborator MD 5-6
    Laborator MD 5-6
    Document11 pagini
    Laborator MD 5-6
    Alexandru Dumbrava
    100% (1)
  • Lab1 Metode Numerice
    Lab1 Metode Numerice
    Document12 pagini
    Lab1 Metode Numerice
    Alexandru Dumbrava
    Încă nu există evaluări
  • GC3 Laborotor
    GC3 Laborotor
    Document4 pagini
    GC3 Laborotor
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document8 pagini
    Laborator 3
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laboratorul Nr.1 LFPC
    Laboratorul Nr.1 LFPC
    Document6 pagini
    Laboratorul Nr.1 LFPC
    Alexandru Dumbrava
    Încă nu există evaluări
  • Lab4 Matlab Utm v10
    Lab4 Matlab Utm v10
    Document4 pagini
    Lab4 Matlab Utm v10
    Grigore043
    Încă nu există evaluări
  • Laboratorul 3
    Laboratorul 3
    Document15 pagini
    Laboratorul 3
    Alexandru Dumbrava
    Încă nu există evaluări
  • Raport MDLab 2
    Raport MDLab 2
    Document8 pagini
    Raport MDLab 2
    Alexandru Dumbrava
    Încă nu există evaluări
  • Laborator 4 AC
    Laborator 4 AC
    Document14 pagini
    Laborator 4 AC
    Alexandru Dumbrava
    100% (1)
  • Lab 1 PW
    Lab 1 PW
    Document4 pagini
    Lab 1 PW
    Alexandru Dumbrava
    Încă nu există evaluări
  • Electronica Lab4
    Electronica Lab4
    Document6 pagini
    Electronica Lab4
    Alexandru Dumbrava
    Încă nu există evaluări