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);