Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Magisches Quadrat per Backtracking (https://www.delphipraxis.net/178617-magisches-quadrat-per-backtracking.html)

Klaus135 17. Jan 2014 18:25

Magisches Quadrat per Backtracking
 
Hallo,
unser Informatiklehrer ist bedauerlicherweise eine totale Pfeife und so arbeite ich mir zum Verständnis üblicherweise alle Projekte aus der Schule selbst nach und versuche sie zu begreifen und diesmal handelt es sich um das Programmieren eines magischen Quadrats(alle Zeilen, Spalten und Diagonalen eines Quadrats mit einer Kantenlänge von n bilden die gleiche Summe, weobeiu jede Zahl von 1 bis n^2 genau ein Mal vorkommt.
1. Das Quadrat stelle ich durch ein Stringgrid mit Rowcount und Colcount=n dar.
2. In dieses Stringgrid schreibe ich nun in "Reihenfolge" die Zahlen von 1 bis 9(3x3).
3. Die Zahlen im Quadrat werden so miteinander vertauscht, dass jede mögliche Kombination ein Mal vorkommt.
4. In jener Prozedur unter 3. befindet sich eine Abbruchbedingung(Magisches Quadrat erfüllt), bei der die Lösung in einem Memo oder ähnlichem gespeichert wird.

Die Abbruchbedingung, als eine Funktion mit Boolean-Augabe, zu formulieren ist genausowenig ein Problem wie das Befüllen des Stringgrids, mein Problem liegt im 3. Schritt, ich beiße mir seit Stunden die Zähne an diesem Tausch-Algorithmus aus. Ein Mal Durchtauschen geht ja noch, aber wie klappere ich alle Möglichkeiten ab, müsste man das mit einer rekursiven Prozedur umsetzen? Mir fehlt einfach der Ansatz :/
Schon Mal danke im Voraus :)

Sir Rufo 17. Jan 2014 18:31

AW: Magisches Quadrat per Backtracking
 
Backtracking impliziert doch schon Rekursion :gruebel:

Klaus135 17. Jan 2014 18:36

AW: Magisches Quadrat per Backtracking
 
Klar, und da ich noch keine rekursiven Instanzen in meinem Programm habe, lag ja auch di Vermutung nahe, dass das jetzt kommen müsste :D aber ich bin nunmal blutiger Anfänger sowohl ind er Rekursion als auch im Backtracking :D
Das ist ja im übrigen der Grund, warum unser Informatiklehrer so eine Pfeife ist, wir haben nie über Rekursion gesprochen im Unterricht und jetzt machen wir Backtracking...so gesehen ist also mein Reskursionswissen so beschränkt, wie es eben sein kann, wenn man sich das heute Nachmittag beigebracht hat :D

Furtbichler 17. Jan 2014 19:07

AW: Magisches Quadrat per Backtracking
 
Verwende das Stringgrid nur für die Darstellung. Arbeite lieber mit einem
Delphi-Quellcode:
Array [0..2,0..2] of Byte
, das geht viel viel schneller.

Wie viele Kombinationen gibt es eigentlich? Wie viele sind rotationssymetrisch oder spiegelbildlich zu anderen bereits untersuchten Kombinationen? ;-)

Aber toll, das Du das selber machen willst (wirklich!) und -typisch- das so ein Lehrer ein Vollpfosten ist. Ich weiss auch nicht, weshalb die größten Nulpen Leerer werden.

Klaus135 17. Jan 2014 19:19

AW: Magisches Quadrat per Backtracking
 
Das waren auch so die Fragen, die ich mir gestellt habe :D steht bei einem Quadrat der Ordnung 3 immer die 5 in der Mitte? Möglichkeiten für die Belegung bei Ordnung n gibt es ja (n^2)!, wenn man einfach alles durchprobiert, aber wäre das dann überhaupt noch Backtracking?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz