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