Einzelnen Beitrag anzeigen

Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#1

Sudoku Kandidaten löschen

  Alt 10. Nov 2011, 11:00
Delphi-Version: 2010
Hey,

glaube ich hab eine sehr schwierige Frage.
An sich ist das bestimmt nicht so kompliziert, aber ich hab mir mal wieder was komisches ausgedacht
Nun, erstmal beschreibe ich mein Programm:

Insgesamt soll ist ein Sudoku Solver werden. Das Sudoku wird in ein Array 0..8 of Array (integer) 0..8 eingetragen. Alle leeren Felder werden dann mit einer 0 gefüllt. Dann werden alle leeren Felder (Felder mit 0) mit Kandidaten gefüllt, sprich bekommen den Wert 123456789. So weit so gut.
Dann werden aus den Kandidaten alle festen Werte gelöscht. Dies gelingt mir auch mit den Werten einer Spalte und einer Reihe, jedoch nicht mit denen in einem Feld. Leider ist der Code für die Spalte und Reihe schon sehr kompliziert. Dann habe ich mich an den Code für die Felder herangewagt, aber scheite immer wieder, mein letzter Versuch sieht folgendermaßen aus:

Es muss ein Denkfehler von mir sein...

Delphi-Quellcode:
Procedure TForm2.BtKndDeleteClick(Sender: TObject);
Var
   x, y, a, b, m, n, xx, yy: integer;
   s, ss: String;
Begin
   m := 0;
   n := 0;
   a := 0;
   b := 0;
   // Feld mit mehrern Kandidaten suchen
   Repeat
      Repeat
         If aSudoku[m, n] > 9 Then Begin
            a := m;
            b := n;
            x := m;
            // Zeile nach Werten durchsuchen und aus Kandidatenliste löschen
            For y := 0 To 8 Do
               If aSudoku[x, y] < 10 Then Begin
                  s := IntToStr(aSudoku[a, b]);
                  ss := IntToStr(aSudoku[x, y]);
                  s := Stringreplace(s, ss, '', [rfReplaceAll]);
                  aSudoku[a, b] := StrToInt(s);
               End;
            y := n;
            // Spalte nach Werten durchsuchen und aus Kandidatenliste löschen
            For x := 0 To 8 Do
               If aSudoku[x, y] < 10 Then Begin
                  s := IntToStr(aSudoku[a, b]);
                  ss := IntToStr(aSudoku[x, y]);
                  s := Stringreplace(s, ss, '', [rfReplaceAll]);
                  aSudoku[a, b] := StrToInt(s);
               End;

            //Feld nach Werten durchsuchen und aus Kandidatenliste löschen
            For xx := 0 To 2 Do
               For yy := 0 To 2 Do Begin
                  For x := xx * 3 To xx * 3 + 2 Do
                     For y := yy * 3 To yy * 3 + 2 Do
                        If aSudoku[x, y] < 10 Then Begin
                           s := IntToStr(aSudoku[a, b]);
                           ss := IntToStr(aSudoku[x, y]);
                           s := Stringreplace(s, ss, '', [rfReplaceAll]);
                           aSudoku[a, b] := StrToInt(s);
                        End;
               End;
         End;
         n := n + 1;
      Until n > 8;
      n := 0;
      m := m + 1;
   Until m > 8;
End;
Angehängte Dateien
Dateityp: zip Sudoku Solver.zip (481,1 KB, 4x aufgerufen)

Geändert von Marcel2906 (10. Nov 2011 um 14:01 Uhr)
  Mit Zitat antworten Zitat