Türme von Hanoi

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Türme von Hanoi

    Hi Leute!
    Ich glaube mal das dies nicht gerade das leichteste ist, deshalb schreib ich das mal hier hinein.
    Nun meine Frage. Ich wollte mich jetzt mal mit dem Thema " Türme von Hanoi" befassen. Will dies, wie solls auch anders sein, proggen, aber das schient gar nicht so leicht zu sein. Könnt ihr mir da mal ein bisschen helfen. Wie muss ich da denn vorgehen. Ich nehme mal an jeder kennt das Spiel( wenn nicht: Es sind sozusagen drei Plätze vorhanden. Auf Platz 1. steht ein Turm aus z.B. 5 Steinen, wobei der unterste größer ist als der, der auf ihm liegt, also wie ne Pyramide. Diese Steine müssen nun von Platz 1 nach Platz 3 gebracht werden. Regeln: es darf immer nur ein Stein bewegt werden; es darf nie ein größerer Stein auf einem kleineren gelegt werden.) Hoffe ihr habst verstanden. Bei dem Projekt muss man ja soviel abfragen. erstmal muss man wissen, welcher Stein der Oberste ist(also immer der kleinste von dem jeweiligen Platz. Dann muss man wissen, wenn man diesen Stein auf Platz 2 legen will, ob da nicht schon ein kleinerer liegt oder ob da überhaupt schon einer liegt. Ihr versteht? Weil mann muss ja wissen, wo der Stein dann zu plazieren ist, Wenn kein Stein liegt, dann direkt über Platz 2. Wenn schon einer oder mehrere liegen, dann muss man ihn ganz nach oben auf die anderen legen. Ist schon kompliziert. Gebt mir mal bitte ein paar strategien. Schon mal Danke.
  • Ich hab' mal n bissel rumgesucht, und eine qbasic-datei gefunden, in der 4 Wege zur Lösung des Problemes beschrieben werden.

    Vielleicht hilft dir das etwas weiter.

    allbasiccode.com/files/abcY2000M07/tower25.bas

    und hier in deutsch eine Erklärung des Problems inklusive Linkliste am Schluss:

    mathematische-basteleien.de/hanoi.htm
    ATH0 unn wech... StS Step5...*CLICK* CARRIER LOST

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Step5 ()

  • Ich hab auch ne Idee...
    Man macht für jeden der 3 Stäbe/Plätze einen Array, der so Groß ist wie die Anzahl der Steine.
    Dann bekommt der kleinste Stein einen Symbolischen Wert von 1, der nächste 2, usw...dann wird immer, wenn ein Stein auf einen anderen gelegt wird, überprüft ob ein kleinerer drunter liegt. Dafür muss man noch 3 Variablen Initialisieren, die jeweils die aktuellen Längen der Arrays halten.

    Ich Hoffe das hat jetzt auchnoch jemand so verstanden wie ichs gemeint hab^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Agnahim ()

  • RE: Türme von Hanoi

    Die Türme von Hanoi sind DAS klassische Beispiel für Rekursion. Ich hab das mal in Java geschrieben, sollte aber kein Problem sein, das in GML zu schreiben

    Quellcode

    1. // count: anzahl der Scheiben
    2. // from: Turm, von dem aus verschoben werden soll
    3. // to: Turm, zu dem verschoben werden soll
    4. // help: Hilfsturm
    5. public void play (int count, int from, int to, int help)
    6. {
    7. if (anzahl > 0)
    8. {
    9. play(count-1, from, help, to); // rekursion!
    10. moveDisk(from, to); // Scheibe verschieben
    11. play(count-1, help, to, from); // nochmal rekursion!
    12. }
    13. }
    Alles anzeigen

    Kleiner Lösungsansatz (ich weiß, ist schwer zu begreifen):
    Einen Turm von 3 Scheiben von A nach C zu schieben, ist so, wie einen Turm von 2 Scheiben von A nach B zu schieben, eine Scheibe von A nach C zu schieben und die 2 Scheiben von B nach C zu schieben. Wie schiebe ich 2 Scheiben von A nach B? Indem ich 1 Scheibe von A nach C, eine Scheibe von A nach B und die Scheibe von C zurück nach B verschiebe.

    Allgemein: Will ich n Scheiben von A nach C verschieben, schiebe ich zuerst n-1 Scheiben von A nach B, dann 1 Scheibe von A nach C, und wieder n-1 Scheiben von B nach C.
    (diese Lösung ist nicht von mir, sondern von meiner Lehrerin. :D)

    Das schwierigste an dem Beispiel ist die grafische Ausgabe. Die wäre von Java aber ein bisschen schwer zu portieren, darum darfst du dir das selbst ausdenken. ;)
    I have always wished that my computer would be as easy to use as my telephone. My wish has come true. I no longer know how to use my telephone.
    Bjarne Stroustrup


    Mein GML-Tutorial
  • Hi!

    Ich hab hier das Spiel als 1-Scrip-Game!
    Du musst den Code nur in das Step, Draw, oder Create Event kopieren.
    Hoffe es hilft dir!
    P.S. Das Spiel ist nicht von mir programmiert! Ich habe es nur aus dem Englischen übersetzt.
    Dateien

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB