A Maple egy fejlett matematikai problémamegoldó és programozói szoftver.
-
xDJCx #457
A Hanoi-tornyos feladatra egy megoldás, az általános rekurzív algoritmus alapján, és felhasználva Maple stack adattípusát a korongok nyomon követéséhez:
HANOI:=proc(n::posint)
description "Hanoi-torony - cél: A oszlopról B-re átrakni a korongokat.";
local a,b,c,d,T,k,atrako,lepes;
a := stack[new](seq(k,k=n..1,-1));
b := stack[new]();
c := stack[new]();lepes:=0;
T:=table(["A"=a,"B"=b,"C"=c]);
atrako:=proc(korongszam::posint,Aoszlop,Boszlop,atmenetioszlop)
if korongszam=1 then
d:=stack[pop](T[Aoszlop]);
stack[push](d, T[Boszlop]); lepes:=lepes+1;
print( cat(lepes,". lépés ",d,Boszlop,", ",Aoszlop,"-->",Boszlop));
else
atrako(korongszam-1,Aoszlop,atmenetioszlop,Boszlop);
d:=stack[pop](T[Aoszlop]);lepes:=lepes+1;
stack[push](d, T[Boszlop]);
print(cat( lepes,". lépés: ",d,Boszlop,", ",Aoszlop,"-->",Boszlop));
atrako(korongszam-1,atmenetioszlop,Boszlop,Aoszlop);
end if;
end proc;
atrako(n,"A","B","C");
end proc;
HANOI(4);