Hallo beisammen,
ich habe es mir zur Aufgabe machen lassen, ein magisches Quadrat mit der Länge n = 4 zu füllen.
Ich bin zuerst den Weg mit der Brechstange gegangen und habe versucht alles per Zufallszahlen zu füllen. Wie erwartet dauert es seeeehr lange, bis da was Brauchbares bei raus kommt.
im Prinzip steht als mein Gerüst aus befülle() und isMagic(), aber wie gesagt, will ich die befüllen()- Methode austauschen. Bei meinen Recherchen bin ich auf 2 Ansätze gestoßen.
1) bix X : das ist mit System. Von wegen "gehe zu Pos. X, schreib da die n/2 rein, geh ein Feld höher.." so in die Richtung und
2) Backtracking
da ich 1) irgendwie langweilig finde, wollte ich das Ganze mittels Backtracking lösen, aber irgendwie finde ich da nicht mal nen Ansatz (programmiertechnisch).
Diesen theoretischen Teil habe ich mir ausgedacht :
Alles anzeigen
Klar, so wie ich das aufgeschrieben habe, habe ich es auch versucht umzusetzen, aber irgendwo klemmts noch.
Kann mich vielleicht jemand an die Hand nehmen?^^
Danke
ich habe es mir zur Aufgabe machen lassen, ein magisches Quadrat mit der Länge n = 4 zu füllen.
Ich bin zuerst den Weg mit der Brechstange gegangen und habe versucht alles per Zufallszahlen zu füllen. Wie erwartet dauert es seeeehr lange, bis da was Brauchbares bei raus kommt.
im Prinzip steht als mein Gerüst aus befülle() und isMagic(), aber wie gesagt, will ich die befüllen()- Methode austauschen. Bei meinen Recherchen bin ich auf 2 Ansätze gestoßen.
1) bix X : das ist mit System. Von wegen "gehe zu Pos. X, schreib da die n/2 rein, geh ein Feld höher.." so in die Richtung und
2) Backtracking
da ich 1) irgendwie langweilig finde, wollte ich das Ganze mittels Backtracking lösen, aber irgendwie finde ich da nicht mal nen Ansatz (programmiertechnisch).
Diesen theoretischen Teil habe ich mir ausgedacht :
Quellcode
- Do{
- do{
- -falls Wert in aktueller Zeile < 16 ist; Wert inkrementieren und auf gültiges ZEILE/SPALTE prüfen ( x > 0)
- -falls Wert in aktueller Zeile == 16;
- Rückschritt erforderlich
- }while (!Zeile && kein Rückschritt erforderlich)
- if (Zeile gültig)
- -nächste Zeile
- }
- else{
- -zurück und ggf. Zellen auf Null setzen (nur bei wert > 0)
- -prüfen, ob es noch eine Lösung geben kann (d.h. ob aktuelle Zelle >= 0 ist)
- }
- }while (noch nicht alle Zellen besetzt)
Klar, so wie ich das aufgeschrieben habe, habe ich es auch versucht umzusetzen, aber irgendwo klemmts noch.
Kann mich vielleicht jemand an die Hand nehmen?^^
Danke