Hallo seth,
dazu sollte dann aber die bedingung in der ersten aeusseren schleife nicht i<is+sz, sondern i<z lauten.
stimmt. Habe ich beim Optimieren übersehen.
was meinst du mit tests? funktionsaufrufe der checkfunktion oder anzahl der abfragen/schleifen innerhalb dieser funktion?
ich meinte rekursionsdurchlaeufe. die anzahl der funktionsaufrufe der check-funktion duerfte bei mir schaetzungsweise aber immerhin noch weit unter 1000 liegen.
Mein Algorithmus zum Erzeugen des Sudokus setzt irgendwo eine Zahl und prüft, ob sie regelkonform ist. Wenn nicht, nächste Zahl probieren. Wenn alle Zahlen durchprobiert sind und keine war ok, dann zurück. Es kann also im ungünstigsten Fall vorkommen, das ich neun mal ohne Erfolg teste und erst dann geht es zurück. Hier liegt auf jedem Fall noch Optimierungspotential. Der Algorithmus ist noch längst nicht fertig, aber bis 9*9 liefert er in vertretbarer Zeit ein Ergebnis.
Ich habe das Programmieren (Fortran und C) bei Messtechnik- und Numerikproblemen (PDEs) gelernt. Rekursionen, Backtracing etc. sind (noch) nicht meine Welt.
Übrigens ist das größte Problem bei meinem zufällig erzeugten Sudoku, dass ich nur weiß, dass es lösbar ist. Ob es auch eindeutig ist, weiß ich nicht. Da auch die Felder mit den Vorgaben zufällig ermittelt werden, weiß ich noch nicht einmal, ob es einen eindeutigen Weg zum Ziel gibt, oder ob ich als Spieler viele Möglichkeiten durchprobieren muss.
Gruß, Jürgen