Ich muss Schachfeld programmieren, das N einliest und versucht möglichst viele Springer-Figuren auf einem Schachfeld der Größe N * N zu platzieren ohne dass diese sich gegenseitig bedrohen. Ich nutze Backtracking für die Implentierung.
Das Programm kommt viele verschiedene Ergebnisse raus. Ich denke es muss nur ein Ergebnis rauskommen zu sein. Und, das Programm reagiert sich nur mit N =2 und N=3 nicht. Warum????:L???:L Danke
Das Programm kommt viele verschiedene Ergebnisse raus. Ich denke es muss nur ein Ergebnis rauskommen zu sein. Und, das Programm reagiert sich nur mit N =2 und N=3 nicht. Warum????:L???:L Danke
Java:
public class Field {
public static void printQueens(int[] q) {
int N = q.length;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (q[i] == j) System.out.print("o ");
else System.out.print(". ");
}
System.out.println();
}
System.out.println();
}
public static boolean inConsistant(int [] s, int r) {
for(int i = 0; i < r; i++) {
if(s[i] == s[r]) return false; //same column
if(s[i] + i == s[r] + r) return false; //same major diagonal
if(s[i] - i == s[r] - r) return false; //same minor diagonal
}
return true;
}
public static void enumerate(int []s, int n) {
if (n == 0) {
printQueens(s);
return;
}
int N = s.length;
int r = N - n;
for( int i = 0; i < N; i++) {
s[r] = i;
if(! inConsistant(s, r))
continue;
enumerate(s, n-1);
}
}
public static void main(String[] args) {
int N = Integer.parseInt(args [0]);
int [] s = new int [N];
enumerate(s, N);
}
}