ich glaub ich hab das problem gefunden. ich hab bei wiki was gesehn und das passt gar nich zu dem was ich mach. ich hab zwar in jeder zeile und jeder spalte immer nur eine zahl von 1 bis 9 und das mit den blocks passt auch aber naja is kein lösbares sudoku. dumme sache.
Beiträge von Aurelius84
-
-
hallo habe versucht einen sudoku generator zu schrieben aber die sind meist nicht lösbar. kann mal bitte einer schaun was ich vergessen hab. bin nen java noob und mach es erst seit 4 monaten also sry wenn was nich ganz korrekt is
Zitatpackage Sudoku;
import java.util.*;
class Generate {
static int board[][] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } };public static void printBoard(int[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++)
if (board[i][j] != 0)
System.out.print(board[i][j] + " ");
else
System.out.print(". ");
System.out.println();
}
System.out.println();
}
public static void generateBoard(int[][] board) {
for (int index = 0; index <= 32; index++) {
Random zeile = new Random();
Random spalte = new Random();
Random r = new Random();
int i = Math.abs(zeile.nextInt()) % 9;
int j = Math.abs(spalte.nextInt()) % 9;
int zzahl = 1+ Math.abs(r.nextInt()) % 9; // Zufallszahl die
// hinzugefügt werden soll// (blockTest(board, i, j, zzahl) == true) &&
if (board[i][j] == 0) {
if ((blockTest(board, i, j, zzahl) == true) &&(zeilenTest(board, i, zzahl) == true)
&& (spaltenTest(board, j, zzahl) == true))
board[i][j] = zzahl;
} else
index = index - 1;}
}
/**
*
* @param zeile
* ist der Zeilenindex vom Feld [zeile][spalte]
* @param zahl
* ist die zahl die dem Feld hinzugefügt werden soll
*
*/
public static boolean zeilenTest(int[][] board, int zeile, int zahl) {
for (int i = 0; i < 9; i++) {
if (board[zeile][i] == zahl) {
return false;
}
}
return true;
}/**
*
* @param spalte
* ist der Spaltenindex vom Feld [zeile][spalte]
* @param zahl
* ist die zahl die dem Feld hinzugefügt werden soll
*
*/
public static boolean spaltenTest(int[][] board, int spalte, int zahl) {
for (int i = 0; i < 9; i++) {
if (board[i][spalte] == zahl) {
return false;
}
}
return true;
}
/**
*
* @param x ist der Zeilen index vom Feld [zindex][sindex]
* @param y ist der Zeilen index vom Feld [zindex][sindex]
* @param zahl ist die zahl die dem Feld hinzugefügt werden soll
*
*/
public static boolean blockTest(int[][] board, int x,int y,int zahl){
int tmpx = x - (x%3);
int tmpy = y - (y%3);for(int i = tmpx ; i < tmpx+3 ; i++){
for(int j = tmpy ; j < tmpy+3 ; j++){
if(board[i][j] == zahl)return false;
}
}
return true;
}/**
* @param args
*/
public static void main(String args[]) {
generateBoard(board);
printBoard(board);
}
}