Ich steh gerade aufm Schlauch :wall:
Das n-Damenproblem besagt das auf einem (Schach-)Feld der Größe n*n bis zu n Damen so positioniert werden können das sie sich gegenseitig nicht schlagen können.
Um eine Lösung zu generieren habe ich folgende rekursive Methode geschrieben. Wobei n die feldgröße sowie anzahl der damen beschreibt und das schachfeld als bitfeld, in form eines 2-dim. booleanschen arrays mit dimensionsgrößen n, beschrieben wird. Die Methode dame_erlaubt gibt ihrem namen entsprechend zurück ob eine dame an der stelle x,y erlaubt ist.
Zwar läuft das alles schön durch, aber gibt erzeugt ein falsches Feld. Für n=8 sieht das Bitfeld danach so aus:
Das n-Damenproblem besagt das auf einem (Schach-)Feld der Größe n*n bis zu n Damen so positioniert werden können das sie sich gegenseitig nicht schlagen können.
Um eine Lösung zu generieren habe ich folgende rekursive Methode geschrieben. Wobei n die feldgröße sowie anzahl der damen beschreibt und das schachfeld als bitfeld, in form eines 2-dim. booleanschen arrays mit dimensionsgrößen n, beschrieben wird. Die Methode dame_erlaubt gibt ihrem namen entsprechend zurück ob eine dame an der stelle x,y erlaubt ist.
Code:
public static boolean dame_setzen(int zeile) {
boolean erlaubt = true;
for (int i=0; i<n; i++) {
if (dame_erlaubt(i,zeile) == true) {
feld[i][zeile] = true;
if (zeile+1 != n) {
dame_setzen(zeile+1);
if (dame_setzen(zeile+1) == false) feld[i][zeile] = false;
} else {
int damenanzahl = 0;
for (int j=0; j<n; j++) {
for (int k=0; k<n; k++) {
if (feld[k][j] == true) damenanzahl++;
}
}
if (damenanzahl != n) erlaubt = false;
}
}
}
return erlaubt;
}
Code:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---+---+---+---+---+---+---+---+---+
1 | D | | | | | | | |
---+---+---+---+---+---+---+---+---+
2 | | D | | | | | | |
---+---+---+---+---+---+---+---+---+
3 | | | | | D | | | |
---+---+---+---+---+---+---+---+---+
4 | | | D | | | | | |
---+---+---+---+---+---+---+---+---+
5 | | | | | | D | | |
---+---+---+---+---+---+---+---+---+
6 | | | | D | | | | |
---+---+---+---+---+---+---+---+---+
7 | | | | | | | | |
---+---+---+---+---+---+---+---+---+
8 | | | | | | | | |
---+---+---+---+---+---+---+---+---+