Comment générer un panneau de sudoku complet? erreur d’algorithme

J’essaie de générer un tableau complet (c.-à-d. Chaque cellule remplie d’un numéro) semblable à un sudoku. C’est pour quelque chose d’autre qui n’a rien à voir avec le sudokus, donc je ne suis pas intéressé à atteindre un sudoku avec des carrés blancs qui peuvent être résolus, ou tout ce qui a trait au sudokus. Je ne sais pas si vous savez ce que je veux dire.

J’ai fait ça en Java:

private int sudokuNumberSelector(int x, int y, int[][] sudoku) { boolean valid = true; Ssortingng validNumbers = new Ssortingng(); int[] aValidNumbers; int squarexstart = 0; int squareystart = 0; int b = 0; // For random numbers Random randnum = new Random(); randnum.setSeed(new Date().getTime()); // Check numbers one by one for(int n = 1; n < 10; n++) { valid = true; // Check column for(int i = 0; i < 9; i++) { if(sudoku[i][y] == n) { valid = false; } } // Check file for(int j = 0; j < 9; j++) { if(sudoku[x][j] == n) { valid = false; } } // Check square switch (x) { case 0: case 1: case 2: squarexstart = 0; break; case 3: case 4: case 5: squarexstart = 3; break; case 6: case 7: case 8: squarexstart = 6; break; } switch (y) { case 0: case 1: case 2: squareystart = 0; break; case 3: case 4: case 5: squareystart = 3; break; case 6: case 7: case 8: squareystart = 6; break; } for(int i = squarexstart; i < (squarexstart + 3); i++ ) { for(int j = squareystart; j < (squareystart + 3); j++ ) { if(sudoku[i][j] == n) { valid = false; } } } // If the number is valid, add it to the String if(valid) { validNumbers += n; } } if(validNumbers.length() != 0) { // String to int[] aValidNumbers = fromPuzzleString(validNumbers); // By this random number, return the valid number in its position Log.d(TAG, "NUMBERS: " + validNumbers.length()); // Select a random number from the int[] b = randnum.nextInt((aValidNumbers.length)); return aValidNumbers[b]; } else { return 0; } } 

Cette méthode s’appelle depuis ce morceau de code:

 int[][] sudoku = new int[9][9]; for(int i = 0; i < 9; i++) { for(int j = 0; j < 9; j++) { sudoku[i][j] = sudokuNumberSelector(i, j, sudoku); } } 

Mais ce n’est pas aussi facile qu’il y paraissait! Lorsque l’algorithme a généré une partie du tableau comme celle-ci et que la boucle est sur la cellule en gras:

 |||164527389||| |||983416257||| |||257938416||| |||719352648||| |||3256791**0**0||| |||000000000||| |||000000000||| |||000000000||| |||000000000||| 

Il n’y a pas de chiffres à mettre dans cette cellule, car tous les nombres selon les règles du sudoku sont déjà sur la colonne, la ligne ou le carré!

C’est un cauchemar pour moi. Y a-t-il un moyen pour que cela fonctionne? Sinon, je suppose que je dois tout refaire comme si je faisais un jeu de Sudoku.

Merci d’avance.