Влияние върху производителността


void traverse (link h, void ( *visit)(link))



страница12/43
Дата21.12.2022
Размер1.47 Mb.
#116011
1   ...   8   9   10   11   12   13   14   15   ...   43
CAA.doc
Свързани:
saap conspect

void traverse (link h, void ( *visit)(link))


{ QUEUEinit(max); QUEUEput(h); while ( !QUEUEempty())

{ (*visit)(h = QUEUEget());


if (h->l != NULL) QUEUEput (h->l);

if (h->r != NULL) QUEUEput (h->r);} }


При графите обхожд.се осъщ.рекурс. или се нар.още търсене в дълбочина.Това е прост рекурс.алг.Започв.от възел V,ние:

  • посещаваме V;

  • рекурс.посещ.вс.непосет.въз,достиж.от V

За да посетим вс.възли,свърз.към възел K в граф,ние го маркираме лкато посетен и то-гава рекурс.посещаваме вс.непосетени въз-ли от списъка на съседство на К.

void traverse (int k, void ( *visit)(int))


{ link t;

(*visit)(k); visited[k] = 1;


for ( t = adj[k]; t != NULL; t = t -> next)

if ( !visited[t->v]) traverse ( t ->v, visit); }


Разл.м/у търс.в дълбоч.и обобщ.обхожд.на дърво е,че е необх.да се предпазим изрично от посещ.на вече посетени възли.
Ако използ.опашка вместо стек,тогава имаме търс.в широч.,което е аналогично на обхождане в широч.на дърво.
Напр.за да посетим вс.възли,свърз.към възел К в 1 граф,вмък.в К в опашка FIFO,после влизаме в цикъл,където е следв.възел от
опашката и ако не е посетен,го посещаваме и вмък.в опашката вс.непосетени възли от списъка му на съседство.

void traverse (int k, void ( *visit)(link))


{link t;

QUEUEinit(V); QUEUEput(k); while ( !QUEUEempty())


if (visited[k=QUEUEget()] == 0)

{(*visit)(k); visited[k] = 1;


for ( t = adj[k]; t != NULL; t = t -> next) if (visited[t->v]==0) QUEUEput (t->v);} }





Сподели с приятели:
1   ...   8   9   10   11   12   13   14   15   ...   43




©obuch.info 2024
отнасят до администрацията

    Начална страница