Ehh..
Mam zaimplementowana kolejke priorytetowa. Chcialbym moc jednak zmienic wartosc danego priorytetu juz po tym jak zostal on umieszczony w kolejce.
Aby to zrobic musze ow priorytet wyszukac. Chodzi o to zeby wyszukiwanie tego priorytetu bylo natychmiastowe czyli O(1). Musze wiec posiadac wskaznik do kazdego elementu w kolejce. I tu jest pies pogrzebany, nie moge tego poprawnie zaimplementowac.
Oto kod procedury budujacej kolejke. Kolejka buduje sie poprawnie ale wskazniki zle wskazuja:/
jakies pomysly?
type Wierzcholek = record
Odleglosc: Integer; //odleglosc czyli priorytet
Wskaznik: Integer;
end;
TablicaWierzcholkow: array [1..15] of Wierzcholek;
procedure TForm1.PrzesunWDol(Rodzic: Integer);
var
Dziecko, NajwiekszyPriorytet,Wskaznik: Integer;
begin
NajwiekszyPriorytet:= TablicaWierzcholkow[Rodzic].Odleglosc;
Wskaznik:=TablicaWierzcholkow[Rodzic].Wskaznik;
repeat
Dziecko:= 2* Rodzic;
if(Dziecko > LiczbaWierzcholkow) then
begin
break
end else
begin
if (Dziecko < LiczbaWierzcholkow) then
begin
if (TablicaWierzcholkow[Dziecko+1].Odleglosc >
TablicaWierzcholkow[Dziecko].Odleglosc)
then
Dziecko:=Dziecko+1;
end;
if (TablicaWierzcholkow[Dziecko].Odleglosc> NajwiekszyPriorytet) then
begin
TablicaWierzcholkow[Rodzic]:=TablicaWierzcholkow[Dziecko];
Rodzic:=Dziecko;
end else
begin
Break;
end;
end;
until (False);
TablicaWierzcholkow[Rodzic].Odleglosc:=NajwiekszyPriorytet;
TablicaWierzcholkow[Rodzic].Wskaznik:=Rodzic;
end;
procedure TForm1.BudujStos;
var
i: Integer;
begin
for i:= 7 downto 1 do
PrzesunWDol(i);
end;
Z gory dziekuje za pomoc,
Wodzu