Witam!

A więc mam program w Pascalu, który przeszukuje drzewo, jednak coś on mi do końca nie działa, gdyż w programie mam dwie zmienne: ilość wierzchołków i ilość krawędzi, pierwsza zmienna chodzi idealnie, zawsze wyszukuje drogę, jednak tylko dla ilości krawędzi** równej zero**, dla ilości krawędzi różnej od zera program się zawiesza...
Co jest źle? Myślę nad tym od dobrego tygodnia i nic nie mogę wymyśleć...

A oto i kod programu:

 Const
  MaxIloscWezlow = 100;

Type
  TypWezla = Word;
  Kolory   = (bialy, szary, czarny);
  Barwy    = Array[1..MaxIloscWezlow] Of Kolory;

  Graf     = Array[1..MaxIloscWezlow, 1..MaxIloscWezlow] Of Boolean;


Var
  a      : Graf;
  b      : Barwy;
  d      : Array[1..MaxIloscWezlow] Of TypWezla;
  g1, g2 : Array[1..MaxIloscWezlow] Of TypWezla;
  n, k   : TypWezla;

Procedure Odwiedz(k : TypWezla; Var krok : TypWezla);
Var
  j : TypWezla;
Begin
  krok:=krok+1;
  g1[k]:=krok;
  b[k]:=szary;
  For j:=1 To n Do
    If a[k, j] And (b[j]=bialy) Then
      Begin
        d[j]:=k;
        Odwiedz(j, krok);
      End;
  krok:=krok+1;
  g2[k]:=krok;
  b[k]:=czarny;
End;

Var
  i, j, t, czas : TypWezla;

Begin
  Write('Ilosc wierzcholkow = ');
  ReadLn(n);
  Write('Ilosc krawedzi = ');
  ReadLn(k);

  {Inicjacja tablic}
  For i:=1 To n Do
    For j:=1 To n Do a[i, j]:=False;
  For i:=1 To n Do
    Begin
      d[i]:=0;
      g1[i]:=0;
      g2[i]:=0;
      b[i]:=bialy;
    End;

  {Wczytaj krawedzie}
  For t:=1 To k Do
    Begin
      ReadLn(i, j);
      a[i, j]:=True;
    End;

  {Odwiedz wszystkie biale wierzcholki grafu}
  czas:=0;
  For i:=1 To n Do
    If b[i]=bialy Then Odwiedz(i, czas);

    For t:=1 To k Do
    Begin
      WriteLn('Podaj krawedz [',t,'] : ');
      ReadLn(i, j);
      a[i, j]:=True;
    End;


  WriteLn('Wierzcholek : Rozpoczeto : Zakonczono :');
  For i:=1 To n Do
    WriteLn(i, ' : ', g1[i], ' : ', g2[i]);
  ReadLn;
End. 

Pozdrawiam!
Z góry dziękuję za pomoc:)