Czy mógłby mi ktoś pomóc z usunięciem rekurencji z poniższego kodu (program znajduje dwuspójne składowe w grafie)?
{
N - liczba wierzcholkow
D[1..N] - tablica numeracji pre-order
Low[1..N] - tablica funkcji Low
C[krawedzie] - tablicy przynaleznosci krawedzi do dwuspojnych skladowych
}
procedure Visit(v, father: Integer);
{dodatkowym parametrem jest wierzch., z ktorego przyszlismy}
begin
D[v]:=time; {przydzielenie numerka w numeracji pre-order}
Inc(time);
Low[v]:=D[v]; {Low[v] nie moze byc wieksze niz D[v]}
for i:=Nieghbour(v) do {petla po sasiadach wierzch. v}
if i<>father then {nie rozwazamy sasiada, z ktorego przyszlismy}
if D[i]=-1 then {jesli wierzch. i jest nieodwiedzony}
begin
Put_On_Stack(v<->i); {odkladamy krawedz, po ktorej przejdziemy na stos}
**Visit(i,v);** {przechodzimy rekurencyjnie do wierzch. i}<code>
if Low[v]>Low[i] then {oraz badamy Low tego wierzcholka}
Low[v]:=Low[i];
if Low[i]>=D[v] then {wykryto dwuspojna skladowa}
begin
Inc(No); {rozpatrujemy skladowa o kolejnym numerze}
repeat
Get_From_Stack(e); {zdejmij ze stosu kolejna krawedz skladowej}
C[e]:=No; {oznacza, ze krawedz nalezy do skladowej o numerze No}
until e=v<->i;
end;
end else {jesli wierzch. i byl juz odwiedzony}
begin
if D[v]>D[i] then {jesli i jest poprzednikiem v w drzewie}
Put_On_Stack(v<->i); {odkladamy "podgladana" krawedz}
if Low[v]>D[i] then {badamy numer pre-order wierzch. i}
Low[v]:=D[i];
end;
end;
procedure FindConstituent;
begin
for i:=1 to N do
D[i]:=-1; {oznaczamy wszystkie wierzcholki jako nieodwiedzone}
time:=1; {zmienna potrzebna do numeracji pre-order}
No:=0; {zmienna potrzebna do numeracji skladowych}
for i:=1 to N do
if D[i]=-1 then {jesli wierzch. i jest nieodwiedzony to ...}
Visit(i,-1); {przechodzimy do wierzch. i}
end;
Będę wdzieczny za każdą pomoc. :)