Ich habe folgende Aufgabe:
Ich habe nun Folgendes geschrieben, erhalte aber nicht das richtige Ergebnis und drehe mich gedanklich im Kreis:
Was sehe, oder verstehe ich nicht?
In dieser Aufgabe soll ein Java-Programm implementiert werden, das alle Lösungen des Damenproblems mit acht Damen ermittelt. Eine Platzierung wird durch ein Array aus acht Ganzzahlen dargestellt. Jedes Array-Element steht dabei für eine Zeile des Schachbretts. Der Wert des Array-Elements bezeichnet die Spalte in der die Dame dieser Zeile zu finden ist. Beachten Sie, dass bei Arrays die Zählung bei 0 beginnt und die Zeilen- und Spaltenindizes deshalb Zahlen von 0 bis 7 sind.
Implementieren Sie nun eine Methode boolean threatened(int i, int j), die überprüft, ob das Feld in Zeile i und Spalte j von einer Dame bedroht wird. Ist das Feld bedroht, soll sie true, andernfalls false zurückgeben. Zum Überprüfen verwendet die Methode die aktuelle Platzierung der Damen, die im Array conf gespeichert ist.
Implementieren Sie nun die Methode place(int i). Zur Überprüfung der Bedrohung soll die Methode threatened verwendet werden. Platzieren einer Dame entspricht einer Zuweisung des Werts h an das Array-Element mit Index i. Das Brett ist voll, wenn die Dame mit dem Index 7 platziert wurde. Ausgabe der Konfiguration erfolgt durch printConf(). Wenn Sie alles richtig gemacht haben, sollte ein Aufruf von place(0) 92 verschiedene, korrekte Konfigurationen ausgeben.
Ich habe nun Folgendes geschrieben, erhalte aber nicht das richtige Ergebnis und drehe mich gedanklich im Kreis:
Java:
import java.util.Arrays;
public class Queens {
static int zaehler=0;
static int conf [];
Queens(int a){
conf = new int[a];
}
static void printConf(){
String a = Arrays.toString(conf);
System.out.println(""+a);
}
static boolean threatened(int zeilen, int spalten){
for (int i = 0; i<zeilen; i++){
if(conf[zeilen-i]==spalten){
return false;}
if(conf[zeilen-i]==spalten-i){
return false;}
if(conf[zeilen-i]==(spalten+i)){
return false;}
}
return true;
}
static void place(int i){
for(int h=0; h<8 ; h++){
if(threatened(i, h)){
conf[i]=h;
if(i==7){
printConf();
zaehler++;
}
else{
place(i+1);
}
}
}
}
public static void main(String[] args){
Queens a = new Queens(8);
a.printConf();
a.place(0);
System.out.print(zaehler);
}
}
Was sehe, oder verstehe ich nicht?
Zuletzt bearbeitet: