Traversarea grafurilor in adancime referat






Parcurgerea grafurilor in adancime

Foarte multi algoritmi de prelucrare a grafurilor necesita examinarea tuturor nodurilor unui graf.Pentru aceasta este necesara definirea unei strategii de traversare a grafului.Se poate vorbi in principal de doua tehnici de traversare:

  • in adancime (Depth First)

  • in latime (Breadth First)

In explicarea modului de functionare a primei variante se foloseste un sir de intregi, VIZITAT, de lungime n cu ajutorul caruia se marcheaza nodurile deja “vizitate” pentru a evita trecerea de mai multe ori prin acelasi nod.Cu alte cuvinte VIZITAT[j] = 1 daca nodul j a fost deja atins si VIZITAT[j] = 0 in caz contrar.Vom spune despre un nod i ca a fost explorat daca are toate nodurile adiacente vizitate. 41561fte61imn4l

Procedura recursiva care asigura parcurgerea unui graf in adancime incepand cu un anumit varf i:

Procedura Parcurgere_in_adancime(i)

pentru toate varfurile k adiacente cu varful i executa

daca varful k este neparcurs tm561f1461immn

atunci se parcurge varful k

apel parcurgere_in_adancime(k)

Iesirea din recursivitate se produce in momentul in care nu se mai gasesc varfuri neparcurse adiacente cu varfurile parcurse deja. Este posibil ca dupa un apel al procedurii incepand cu un anumit varf i sa ramana in graf varfuri neparcurse.In aceasta situatie apelul procedurii se repeta pentru un alt varf initial (dintre varfurile neparcurse) pana la parcurgerea tuturor nodurilor grafului. Programul apelant trebuie sa asigure parcurgerea varfului utilizat in apel.Conditiile interne care apar in problemele particulare de backtracking pot impune o parcurgere integrala sau numai partiala a grafului.Procedura backtracking(i) este pentru cazul parcurgerii integrale a unui graf in adancime:

Procedura Backtracking(i)

pentru toate varfurile k adiacente cu varful i executa

daca varful k este neparcurs si sunt indeplinite conditiile de continuare

atunci se parcurge varful k

se utilizeaza varful k in solutie

daca s-a ajuns la o solutie se afiseaza

apel Backtracking(k)

Folosind aceasta tehnica de traversare ne propunem sa raspundem la intrebarea:

Fiind dat un graf neorientat G=(V,E), este acesta un graf conex?

Conform acestei metode explorarea unui nod este suspendata ori de cate ori un nou varf este vizitat.Pentru graful G daca pornim din varful 1, vizitarea nodurilor se va face in ordinea: 1,2,4,8,5,6,3,7.

3

2

8





6

5

7

4

1

Urmatoarea functie returneaza true daca graful este conex si false in caz contrar folosind tehnica parcurgerii in adancime:

Function Conex: boolean;

Procedura adancime(s) {parcurge graful in adancime}

VIZITAT[s]:=1;

pentru fiecare nod w adiacent cu s executa

daca VIZITAT[w] = 0 atunci apel adancime(w)

sfarsit daca;

sfarsit pentru;

sfarsit procedura;

pentru toate nodurile w executa

VIZITAT[w]:=0;

sfarsit pentru;

apel adancime(1);

Conex:=true;

pentru toate nodurile w executa

daca VIZITAT[w] = 0 atunci

conex:=false;

sfarsit daca;

sfarsit pentru;

Sfarsit functie;


loading...









Copyright © Contact | Trimite referat


Ultimele referate adaugate
Mihai Beniuc
   - Mihai beniuc - „poezii"
Mihai Eminescu Mihai Eminescu
   - Mihai eminescu - student la berlin
Mircea Eliade Mircea Eliade
   - Mircea Eliade - Mioara Nazdravana (mioriţa)
Vasile Alecsandri Vasile Alecsandri
   - Chirita in provintie de Vasile Alecsandri -expunerea subiectului
Emil Girlenu Emil Girlenu
   - Dragoste de viata de Jack London
Ion Luca Caragiale Ion Luca Caragiale
   - Triumful talentului… (reproducere) de Ion Luca Caragiale
Mircea Eliade Mircea Eliade
   - Fantasticul in proza lui Mircea Eliade - La tiganci
Mihai Eminescu Mihai Eminescu
   - „Personalitate creatoare” si „figura a spiritului creator” eminescian
George Calinescu George Calinescu
   - Enigma Otiliei de George Calinescu - geneza, subiectul si tema romanului
Liviu Rebreanu Liviu Rebreanu
   - Arta literara in romanul Ion, - Liviu Rebreanu














loading...



Cauta referat
Scriitori romani