A efectuat:
A verificat:
Lisnic Inga
Chiinu 2015
1. SCOPUL LUCRRII:
Studierea algoritmilor de cutare n graf i a diferitor forme de pstrare i prelucrare a datelor.
Elaborarea procedurii de cutare n adncime.
2.
NOTE DE CURS
Rdcina arborelui se va numi tatl vrfurilor care servesc drept rdcini pentru subarbori; aceste
vrfuri se vor mai numi copiii rdcinii arborelui: rdcina primului subarbore se va numi fiul
cel mai mare, iar rdcina fiecrui subarbore urmtor n list se va numi frate.
Operaiile de baz pentru arbori vor fi:
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.
2.
SCOPUL LUCRRII:
2.
Listingul programului:
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
struct lista
{
int inf;
lista *next;
} *ls;
typedef struct list
{
int info;
struct list *next;
} *stack;
stack push(stack s,int info);
stack pop(stack s, int *pinfo);
void pop_end(stack &s, int *pinfo);
int este(int v, int n, int t[]);
int getst(stack s);
lista *inss(lista *cap, int k);
void afisl(lista *cap);
{
if (cap) {printf("%5d",cap>inf);afisl(cap->next);} else
return;
}
stack push(stack s,int info)
{
//Pune virful in topul stivei
stack t;
t=(stack)malloc(sizeof(list))
;
t->info=info;
t->next=s;
return t;
}
stack pop(stack s, int
*pinfo)
{
//Extrage virful din topul
stivei
stack t;
if (!s) return NULL;
else
{
*pinfo=s->info;t=s>next;
free(s); return(t);
}
}
int este(int v, int n, int
t[])
{
//Verific daca virful se afla
in tabloul ce contine drumul
int val=0,i;
for (i=0;i<=n;i++) if
(v==t[i]) {val=1;break;}
return val;
}
int getst(stack s)
{
//Scoate val 1-ului element
din lista
if (!s) return -1;
else
return(s->info);
}
int mdfcontine(lista *cap,int
n,int t[])
{
while (cap)
if (este(cap->inf,n,t))
cap=cap->next;
else return(cap->inf);
return (-1);
}
void InitDrum()
{
int i;
for (i=0;i<25;i++) tab[i]=999;
}
void InitTL()
{
int i;
for (i=0;i<25;i++)
tl[i]=NULL;
}
void IntrTL()
{
textbackground(BLUE);
clrscr();
int v;
printf("introdu numarul de
noduri: ");scanf("%d",&n);
for (i=1;i<=n;i++)
{printf("%d |",i);do
{scanf("%d",&v);
tl[i]=inss(tl[i],v);}
while(v!=0);}
}
void AfisTL()
{
for (i=1;i<=n;i++)
{printf("%d |
",i);afisl(tl[i]);puts("");}
}
void P_Adincime()
{
clrscr();
textbackground(BLUE);
int v1,vc,k;
l:printf("introdu virful de
la care vom incepe:
");scanf("%d",&v1);
if(v1<1 || v1>n) {puts("Virf
inexistent!");getch();goto
l;}
else if (v1==999) return;
else {tab[j+
+]=v1;s=push(s,v1);}
while (s) { vc=getst(s);
if (tl[vc] &&
tl[vc]->inf!=0){
int
c=mdfcontine(tl[vc],j-1,tab);
if (c!=-1 && c)
{tab[j+
+]=c;s=push(s,c);}
else
s=pop(s,&k);}
else s=pop(s,&k);
}
}
void AfisDrum()
{
for (i=0;i<j;i++) printf("%d
",tab[i]);
}
int menu()
{
textmode(C4350);
textbackground(BLUE);
clrscr();
int func=1;
while (1)
{
gotoxy(23,12);
textcolor(GREEN);
textbackground(BLACK);
cputs("
");
gotoxy(23,13);
cputs("");
textcolor(MAGENTA);
cputs("
M E
N I U
");
textcolor(GREEN);
cputs("");
gotoxy(23,14);
cputs("
");
gotoxy(23,15);
cputs("
");
textbackground(BLACK);
textcolor(GREEN);
gotoxy(23,16);
cputs("");
textbackground(4*(func==1));
textcolor(3+12*(func==1));
cputs("Introducere
lista de incidenta
");
textbackground(BLACK);
textcolor(GREEN);
cputs("");
gotoxy(23,17);
cputs("
");
gotoxy(23,18);
cputs("");
textbackground(4*(func==2));
textcolor(3+12*(func==2));
cprintf("Afisarea
listei de incidenta
");
textbackground(BLACK);
textcolor(GREEN);
cputs("");
gotoxy(23,19);
cputs("
");
gotoxy(23,20);
cputs("");
textbackground(4*(func==3));
textcolor(3+12*(func==3));
cprintf("Parcurgerea in
largime
");
textbackground(BLACK);
textcolor(GREEN);
cputs("");
gotoxy(23,21);
cputs("
");
gotoxy(23,22);
cputs("");
textbackground(4*(func==4));
textcolor(3+12*(func==4));
cprintf("Parcurgerea in
adincime
");
textbackground(BLACK);
textcolor(GREEN);
cputs("");
gotoxy(23,23);
cputs("
");
gotoxy(23,24);
cputs("");
textbackground(4*(func==5));
textcolor(1+12*(func==5));
cprintf("
Iesire
");
textbackground(BLACK);
textcolor(GREEN);
cputs("");
gotoxy(23,25);
cputs("
");
switch(getch())
{
case
80:if(func<5)func++;else if
(func==5) func=1; break;
case
72:if(func>1)func--;else if
(func==1) func=5; break;
case 13:return func;
case 27:exit(0);
}
}
}
void P_Latime()
{
textbackground(BLUE);
clrscr();
int v1,vc,b;
struct lista *ctl[25];
for (i=1;i<=n;i++)
ctl[i]=tl[i];
l:clrscr();printf("Introdu
primul virf:
");scanf("%d",&v1);
if(v1<1 || v1>n) {puts("Virf
inexistent!");getch();goto
l;}
else s=push(s,v1);
while (s || s2)
{
if (s)
{
pop_end(s,&vc);if (!
este(vc,j-1,tab) && vc!=0)
tab[j++]=vc;
if (ctl[vc]->inf!=0)
while (ctl[vc]->next)
{if (!este(ctl[vc]>inf,j-1,tab))
s2=push(s2,ctl[vc]>inf);ctl[vc]=ctl[vc]->next;}
}
else
{
stack temp=s;
s=s2;s2=temp;
}
}
}
void pop_end(stack &s, int
*pinfo)
{
if (!s) return ;
if (s->next) pop_end(s>next,pinfo);
else {*pinfo=s>info;s=NULL;} }