Thema: Delphi Sudoku Logik

Einzelnen Beitrag anzeigen

Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#12

AW: Sudoku Logik

  Alt 26. Dez 2010, 22:35
Hi,
Wird versucht, in SetzeFeld das gesamte Sudoku zu füllen? Es sieht für mich gerade so aus, dass immer wieder SetzeFeld aufgerufen wird, wenn eine Entscheidung gültig war. Das würde dann aber bedeuten, dass ich am Anfang nur einmal sagen muss, dass er für Feld 1 SetzeFeld aufrufen soll, weil sich der Rest dann eh alleine erledigt... hab ich das richitg verstanden?
Ja Du rufst SetzeFeld für das 1. Feld auf, und das füllt dann durch die rekursiven Aufrufe das gesamte Sudoku.

Hier mal die Fehler die mir beim groben Überfliegen aufgefallen sind:
while ValidDigit > 0 do
Die Variable GültigeEntscheidungen aus dem PseudeCode ist eine Menge; Die Bedingung für die While-Schleife ist an die Anzahl der Elemente in dieser Menge geknüpft. Am einfachsten gehts hier tatsächlich mit einer Liste.
nr:=random(length(ValidDigit))
ValidDigit enthält ja alle noch gültigen Entscheidungen, aus der eine gewählt werden sollt. Folglich wäre das hier richtig:
nr:=ValidDigit[random(length(ValidDigit))]
Delphi-Quellcode:
if SetDigit(X+1,Y,Size) then
  Result:=True;
Zum einen: X+1 geht nur solange gut, bis X > Size wird; Dann muss die nächste Zeile genommen werden (Y+1). Zum anderen reicht ein result := true; nicht - Die Funktion muss komplett beendet werden.

Deswegen würde ich auf eine Liste zurückgreifen. Hier kann man dies einfacher implementieren.

- ... und als letztes noch in der Frage, ob es für eine while-Schleife auch einen else-Zweig gibt.
Nein Eine While-Schleife kennt kein else.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat