Einzelnen Beitrag anzeigen

xyss

Registriert seit: 9. Nov 2012
7 Beiträge
 
#11

AW: Sudoku Generator (Anfänge)

  Alt 26. Jan 2013, 08:41
Mittlerweile hab ich den Generator schon wieder etwas mehr verbessert(durchschnittlich ~5 Sekunden für ein Sudoku) aber meine Prozedur, welche die Zahlen aus dem vollständigen Sudoku herausziehen soll, funktioniert nicht wie sie soll...
Ich hab zum Thema Sudoku ein wenig "nachgeforscht", und es hieß, dass mindestens 7 der 9 Ziffern irgendwo in dem fertigen Sudoku vorhanden sein müssen, und es mindestens 17 Ziffern insgesamt sein müssen (ich hab in dem Fall 20 genommen). Ob noch mindestens 8 der 9 Zahlen im Spiel vorhanden sind, soll von der IsValid function überprüft werden. Und counter (der am Ende meiner FillUp prozedur auf 81 gesetzt wird) soll angeben, wieviele Ziffern sich noch im Sudoku-Spiel befinden.

Nun sind mir allerdings 2 Fehler aufgefallen:

1. IsValid scheint nie false zu sein (oder es war bisher nur Zufall), denn bei all meinen Versuchen hat die while-Schleife dadurch aufgehört, dass Counter zu klein ist.

2. Ich habe den Wert von Counter bei mehreren Versuchen überprüft, und mit dem Feld verglichen, und immer das gleiche Ergebnis: Counter ist 19, wobei sich im Feld noch 30-40 Ziffern befinden.

Erbitte Hilfe

Code:
  while ((IsValid(SG)=true) and (Counter>=20)) do
  begin
    Col:=random(9);
    Row:=random(9);

    temp:=SG.Cells[Col,Row];
    SG.Cells[Col,Row]:='';
    SG.Repaint;
    Counter:=Counter-1;
  end;
Code:
function TfrmMain.IsValid(SG:TStringGrid):boolean;
var
  Col,Row,n,CountNumber,Count:integer;
begin
  result:=true;
  Count:=0;

  for n:=1 to 9 do
  begin
    CountNumber:=0;
    for Col:=0 to 8 do
    begin
      for Row:=0 to 8 do
      begin
        if SG.Cells[Col,Row]=InttoStr(n) then
          inc(CountNumber,1);
      end;
    end;
    if CountNumber<>0 then
      inc(Count,1);
  end;
  if Count<=7 then result:=false;
end;
  Mit Zitat antworten Zitat