Piszę program szukający najkrótszej drogi w grafie.
20 wierzchołków, z każdego wychodza 3 scieżki.
Program ma szukać najkrótszą drogę.
Robie to w Lazarusie więc chyba dział forum odpowiedni.
Uczę się tego dopiero chwilę i może nie widzę jakiegoś banalnego błędu.

oto kod:

koniecint i poczatekint przyjmuja w innej czesci programu, ale akurat to działa.
Problem mam w funkcji szukaj_drogi()
tablica Z[]=wierzchołki/wezły w których już byłem
tablica miejsca[]-pomocnicza tablica sprawdzająca wierzchołki do których udała się funkcja szukaj_drogi()
tablica d[i] odległość od wierzchołka startint do wierzchołka i
tablica a[i,l] zbior krawedzi punktu i a[i,l].koszt-koszt dojscia z punktu i do wezła a[i,l].wezel
gdy algorytm dojdzie do końcowego punktu wpisuje w tablice d[koniecint] wartość calej przebytej drogi (powinien tak robić ale niestety nie działa)
dla wezła który jest połączony bezpośrednio z startint zwraca prawidłową wartość. Dla każdego kolejnego przyjmuje jakąs dziwną liczbę

Krawedz = Record
            wezel : Integer;
            koszt : real;
          End;
  Graf    = Array[1..20, 1..3] Of Krawedz;

a : Graf;

function szukaj_drogi(tablica:array of boolean;i:integer;droga:real): real;
var
  l:integer;
  miejsca:array[1..20] of boolean;
  
Begin
  for l:=1 to 20 do miejsca[l]:=tablica[l];
  for l:=1 to 3 do
        begin
             if (miejsca[a[i,l].wezel]=false) then //jesli jeszcze nie byl w wierzcholku to leci dalej
              begin
                   if a[i,l].wezel=koniecint then
                     begin
                     if ((droga+a[i,l].koszt)<d[koniecint]) then d[koniecint]:=(droga+a[i,l].koszt);
                     end else
                     begin
                      miejsca[a[i,l].wezel]:=true;
                      droga:=droga+a[i,l]koszt;
                      szukaj_drogi(miejsca,a[i,l].wezel,droga);
                      end;
              end;
        end;
end; 

Procedure szukanie();
Var
  i,licz : Integer;
Begin

  For i:=1 To ilosc_wierzcholkow Do d[i]:=maxreal; // maxreal=1000000000
  d[startint]:=0;
  For i:=1 To 20 Do z[i]:=False;
  z[startint]:=True;
  if d[koniecint]=maxreal then
      begin
      szukaj_drogi(z,startint,0);
      end;
end;

Bardzo dziękuje za jakąś wskazówkę

dodanie znacznika <code class="delphi"> - fp