Einzelnen Beitrag anzeigen

Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Java + Sudoku Algorithmus

  Alt 13. Dez 2008, 10:45
Hallo,

da ich kein aktives Forum für Java kenne, wollte ich es mal hier probieren. Ich denke das mein Problem auch nichts mit Java direkt zu tun hat. Mein Problem ist mehr der Algorithmus. Ich will einen Algorithmus schreiben, womit ich eine Sudoku Matrix in meinem zweidimensionalen Array erzeugen kann. Dazu möchte ich eine Klasse schreiben.

Es gibt drei Methode die ich unbedingt verwenden muss:

1. public boolean checkRows(int[][] pSudokuMatrix) // Prüft, ob die Reihen den Spielregeln entsprechen
2. public boolean checkColumns(int[][] pSudokuMatrix) // Prüft, ob die Spalten den Spielregeln entsprechen
3. public boolean checkBlocks(int[][] pSudokuMatrix) // Prüft, ob die Blöcke den Spielregeln entsprechen

Nun zum Algorithmus, den ich verwenden soll!

Beginnend in der ersten Zeile, soll eine Zufallszahl erzeugt werden. Wenn die erzeugt Zufallszahl zwischen 1 und 9 den Regln entspricht, dann kann die erste Zahl eingetragen werden. Dann geht es mit der zweiten Zahl der ersten Reihe weiter. Das wird solange gemacht, bis die erste Reihe voll ist. Dann geht es zur zweiten Reihe. Das wird wieder solange bemacht, bis alle Reihen voll sind.

Ich glaube, dass ich den Algorithmus ganz gut imlementiert habe. Jedoch funktioniert er mal und mal nicht.

Hier mein Code:

Code:
    public void generateSudokuMatrix() {
        Random random = new Random();// Erzeugt ein Objekt der Klasse Random
        int[][] temp = new int[size * size][size * size];// size hat den Wert 3 und temp ist ein zweidimensionales Array
        int x;// Schleifenvariable
        int y;// Schleifenvariable
       
        y = 0;
        do {
            x = 0;
            do {
                temp[x][y] = random.nextInt(size * size) + 1;// Zufallszahl von 1 - 9 erzeugen
                if(checkRows(temp) && checkColumns(temp) && checkBlocks(temp)) {
                    sudoku = temp; // Sudoku ist auch ein zweidimensionales Array
                    x++;
                }
                else {
                    temp[x][y] = 0;
                }
            }while(x != size * size);
            y++;
        }while(y != size * size);
    }
Vieleicht könnt ihr mir helfen.

LG Christian
  Mit Zitat antworten Zitat