Witam,
napisalem programik BFS, ale cos mi sie wywala. problem tkwi w procedurze BFS. Prosze osoby, ktore znaja ten algorytm, aby rzucily na niego okiem i napisaly mi, gdzie do kodu wkradl mi sie blad, bo po wielu godzinach poszukiwan nie moge go znaleŹĆ, pozdrawiam

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  N_MAX = 10; // maksymalna ilosc wierzcholkow
  W_MAX = 15; // maksymalna wartosc wierzcholka

  PLIK_IN = 'C:\tmp\grafIN.txt';

type
  TLista = ^TObiekt;
  TObiekt = record
    wart : integer;
    nast : TLista;
  end;

  TGraf = array[1..N_MAX] of TLista;
  TKolor = array[1..N_MAX] of char;
  TWierzWiodacy = array[1..N_MAX] of integer;

  //tablica zawierajaca polaczenia (krawedzie) miedzy wierzcholkami
  TPolaczenie = array[1..W_MAX, 1..W_MAX] of boolean;

var
  x, y : integer;
  i : integer;
  Graf : TGraf;
  Kolor : TKolor;
  Polaczenie : TPolaczenie;
  Glowa, Ogon : TLista;
  WierzWiodacy : TWierzWiodacy;
  szary : integer;
  Licznik : integer;


procedure WczytajZPliku (NazwaPliku : string; var tab : TPolaczenie);
var
   t : text;
   x, y : integer;
begin
     assign(t, NazwaPliku);
     reset(t);
     readln(t, szary);
     while not eof (t) do
       begin
         readln(t, y, x);
         tab[y][x] := true;
       end;
     close(t);
end;

procedure DodajKrawedz(var g : TGraf; y, x : integer);
var
  p : TLista;
begin

  new(p);
  p^.wart := x;
  p^.nast := g[y];
  g[y] := p;

end;

procedure WypiszListe(lista: TLista);
var
  tmp : TLista;
begin
  tmp := lista;
  while tmp <> nil do
    begin
      write(' ->', tmp^.wart);
      tmp := tmp^.nast;
    end;

end;

procedure DodajDoKolejki(Wierzcholek : integer; var Glowa : TLista);
var
  tmp: TLista;
begin

  new(tmp);
  tmp^.wart := Wierzcholek;
  Glowa^.nast := tmp;
  Glowa := tmp;

end;

procedure UsunZKolejki(var Ogon: TLista);
var
  tmp : TLista;
begin
  if Ogon <> nil then
    begin
      tmp := Ogon;
      Ogon := Ogon^.nast;
      dispose(tmp);
    end;
end;


procedure BFS(var Glowa, Ogon: TLista;
              var Graf: TGraf;
              var Kolor: TKolor;
              var WierzWiodacy: TWierzWiodacy;
              var Licznik: integer);
var
  Lista: TLista;
  Wierzcholek: integer;
begin
  while (Glowa <> nil) do
    begin
      Lista := Graf[Glowa^.wart];
      while (Lista <> nil) do
        begin
          Wierzcholek := Lista^.wart;
          writeln('          ', Wierzcholek);
          if (Kolor[Wierzcholek] = 'b') then
            begin
              Kolor[Wierzcholek] := 's';
              WierzWiodacy[Wierzcholek] := Licznik;
              Inc(Licznik);
              writeln('tutaj1');
              DodajDoKolejki(Wierzcholek, Glowa);
              writeln('tutaj11');
            end;
          Kolor[Ogon^.wart] := 'c';
          writeln('tutaj3');
          UsunZKolejki(Ogon);
          writeln('tutaj33');
          Lista := Lista^.nast;
          write('tutaj333     ', Ogon^.wart,   '->');
          WypiszListe(Ogon);
          writeln
        end;

    end;
end;

begin
  WczytajZPliku (PLIK_IN, Polaczenie);

  for x := 1 to W_MAX do
    for y := 1 to W_MAX do
      if Polaczenie[y, x] then DodajKrawedz(Graf, y, x);

  //wypisanie grafu
  for i:=1 to N_MAX do
    if Graf[i] <> nil then
      begin
        write(i, '  ');
        WypiszListe(Graf[i]);
        writeln;
      end;

  for i := 1 to N_MAX do
    Kolor[i] := 'b';
  Kolor[szary] := 's';

  WierzWiodacy[szary] := 1;
  Licznik := 2;

  new(Glowa);
  Ogon := Glowa;
  Glowa^.wart := szary;

  BFS(Glowa, Ogon, Graf, Kolor, WierzWiodacy, Licznik);

  for i :=1 to N_MAX do
    write(Kolor[i], ' ');
  writeln;

  for i := 1 to N_MAX do
    write(WierzWiodacy[i], ' ');

  writeln('asasa');
  readln(licznik);


end.