Ich bin im Moment dabei ein Programm zur Lösung eines Sudokus zu programmieren. Es ist noch nicht fertiggestellt. Ich stoße jedoch jetzt schon auf ein Problem. Leider benötigt man, um das Problem zu verstehen den ganzen Code:
Die Ausgabe, wenn ich das Programm laufen lasse, sieht nun wie folgt aus:
X: 0 Y: 0 = 1
X: 1 Y: 0 = 2
X: 2 Y: 0 = 3
X: 3 Y: 0 = 4
X: 4 Y: 0 = 5
X: 5 Y: 0 = 6
X: 6 Y: 0 = 7
X: 7 Y: 0 = 8
X: 8 Y: 0 = 9
X: 0 Y: 1 = 4
X: 1 Y: 1 = 5
X: 2 Y: 1 = 6
X: 3 Y: 1 = 1
X: 4 Y: 1 = 2
X: 5 Y: 1 = 3
X: 6 Y: 1 = 8
X: 7 Y: 1 = 7
Sudoku:
1 2 3 4 5 6 7 8 9
4 5 6 1 2 3 8 7
Mir geht es nun um die beiden fett gedruckten Zahlen.
Warum werden sie überhaupt ausgegeben?
Müsste er nicht bei der 8 schon abbrechen da keine Zahl an diese Stelle hineinpasst?
Grüße
LS
Java:
public class Sudoku {
public static int [][] Field = new int [9][9];
public static void backtrack(int posX, int posY) {
//Field [6][0] = 8;
for (int a = 1; a < 10; a++){
if (checkAll(posX, posY, a)== true){
if (posX == 8){
Field [posX][posY] = a;
System.out.println("X: " + posX + " Y: " + posY + " = " + Field[posX][posY]);
backtrack(0, posY + 1);
break;
}else{
Field [posX][posY] = a;
System.out.println("X: " + posX + " Y: " + posY + " = " + Field[posX][posY]);
backtrack(posX +1, posY);
break;
}
} else{
}
}
Field[posX][posY] = 0;
//System.out.println(checkBox(6, 1, 8));
}
public static boolean checkAll (int x, int y, int val){
if(checkCol(x, val) && checkRow(y, val) && checkBox(x, y, val)){
return true;
}else {
return false;
}
}
public static boolean checkCol(int x, int val){
for(int y = 0;y < 9; y++ ){
if (Field [x][y] == val){
//System.out.println("Treffer Spalte");
return false;
}
}
return true;
}
public static boolean checkRow(int y, int val){
for(int x = 0;x < 9; x++ ){
if (Field [x][y] == val){
//System.out.println("Treffer Reihe");
return false;
}
}
return true;
}
public static boolean checkBox(int x, int y, int val){
x = (x / 3) * 3;
y = (y / 3) * 3;
for (int row = 0; row < 3; row++){
for (int col = 0; col < 3; col++){
if (Field[y + row][x + col] == val){
//System.out.println("Treffer Box");
return false;
}
}
}
return true;
}
public static void main(String[] args) {
backtrack(0,0);
}
}
Die Ausgabe, wenn ich das Programm laufen lasse, sieht nun wie folgt aus:
X: 0 Y: 0 = 1
X: 1 Y: 0 = 2
X: 2 Y: 0 = 3
X: 3 Y: 0 = 4
X: 4 Y: 0 = 5
X: 5 Y: 0 = 6
X: 6 Y: 0 = 7
X: 7 Y: 0 = 8
X: 8 Y: 0 = 9
X: 0 Y: 1 = 4
X: 1 Y: 1 = 5
X: 2 Y: 1 = 6
X: 3 Y: 1 = 1
X: 4 Y: 1 = 2
X: 5 Y: 1 = 3
X: 6 Y: 1 = 8
X: 7 Y: 1 = 7
Sudoku:
1 2 3 4 5 6 7 8 9
4 5 6 1 2 3 8 7
Mir geht es nun um die beiden fett gedruckten Zahlen.
Warum werden sie überhaupt ausgegeben?
Müsste er nicht bei der 8 schon abbrechen da keine Zahl an diese Stelle hineinpasst?
Grüße
LS
Zuletzt bearbeitet: