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