Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem mit Sudoku ähnlichem Programm

  Alt 1. Mär 2006, 19:57
Herzlich willkommen in der Delphi-PRAXiS, Leo.

Du solltest Randomize nur einmal aufrufen, weil ansonsten der Pseudo-Zufallsgenerator nicht richtig funktioniert.

Wenn du eine Zeile Schritt für Schritt füllst, dann ist es nicht sehr ökonomisch eine beliebige Zufallszahl zu generieren und deren Vorhandensein zu überprüfen. Die mathematische Bedingung ist viel klarer - etwa wie bei einer Lottoziehung. Eine bereits gezogene Zahl kann nicht nochmal gezogen werden, weil sie ja aus der Ziehungsmenge verschwindet. Das solltest du nachbilden.

Ein Algorithmus für das Befüllen eines 9er Quadrats könnte so aussehen:

Das Kästchen mit der Spalten-Zeilen-Koordinate [0,0] befindet sich links oben.
Wir definieren die Grundmenge G als die Menge der Ziffern 1 bis 9. Sei die Vorratsmenge VD gleich G. Sei s der Spaltenindex und z der Zeilenindex. Für jedes Kästchen [s,z] mit s = z (Diagonale), für steigendes s, entnehmen wir der Vorratsmenge VD ein beliebiges Element und tragen es in das Kästchen [s,z] ein. Nach der Eintragung ist für die Spalte s eine Vorratsmenge VS als die Differenz von Grundmenge G und der Menge der bereits eingetragen Ziffern Ss definiert. Für das schrittweise Auffüllen der noch nicht gefüllten Kästchen [s,z] in der Spalte s wird jetzt jeweils die Vorratsmenge V als Differenz der Menge VS und der Menge Zz für alle z > s gebildet, wobei Zz wieder die Menge der bereits eingetragen Ziffern in der Zeile z darstellt. Analoges gilt für das Auffüllen der Spalte z.

Mit dem Eintragen der letzten Ziffer auf der Diagonalen ist das 9er Quadrat so gefüllt, dass in keiner Spalte oder Zeile doppelte Werte zu finden sind. Leider bist du dann noch nicht fertig, da für ein 9er Sudoku eine weitere Bedingung eingehalten werden muss, aber bereits die korrekte und elegante Implementierung des von mir angegebenen Algorithmus ist ja schon eine schöne Aufgabe.

Mein Algorithmus ist nicht der einzig mögliche. Egal wie du jetzt vorgehen willst - viel Spaß.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat