Neee! Eine zufällige Folge von Zahlen 1..N macht man so: Erzeuge ein Array mit den Zahlen 1..N und mische es (am Besten nach Miller-Yates):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Procedure ShuffleMillerYates (Var A :TArray); Var I, J, T : Integer;
begin For I := Low (A) to High (A) do begin J := I + Random (Length(A) - I); T := A[J]; A[J] := A[I]; A[I] := T; end; end; |
In einem Sudoku-Spiel darf in jeder Reihe, jeder Spalte und jedem 3x3 Quadranten die Zahl nur 1x vorkommen. Da kommt man mit dem Mischen aber nicht weit.
Du musst anders vorgehen: Ich habe es mit Mengen gemacht:
Sei
Z[i] die Menge der zur Verfügung stehenden Zahlen der Zeile #i,
S[j] die Menge der zur Verfugung stehenden Zahlen der spalte #j und
Q[x] die Menge der zur Verfügung stehenden Zahlen des Quadranten x.
Die Nr. des Quadranten an Zelle x,y wird so berechnet : q(x,y) = 3*(x div 3) + y div 3;
Zelle i,j kann dann nur Zahlen annehmen, die in Z[i], S[j] und Q[q(i,j)] enthalten sind, also in der Schnittmenge der drei Mengen. Damit ist die Lösung ganz einfach.
Na denn, dann. Bis dann, denn.