N
Nicki
Gast
Ich habe jetzt folgende Frage zu meinem Code: Gibt es noch eine andere Methode als "return" für die Ausgabe zu nehmen, sodass dieser dann nicht die Methode verlässt?
Ich habe das Problem, dass er zu boolean found2 garnicht mehr erst kommt. Wie kann sicherstellen, dass er alle "verbotenen Plätze" markiert?
Ich habe das Problem, dass er zu boolean found2 garnicht mehr erst kommt. Wie kann sicherstellen, dass er alle "verbotenen Plätze" markiert?
Java:
public class Acht_Damen_Problem {
public static void clear(int [][]feld){
for (int i=0; i<8; i++){
for (int j=0; j<8; j++){
feld[i][j]=0;
}
}
}
//Hauptmethode
public static int [] [] loese(int zeile, int spalte){
int [][] feld = new int [8][8];
clear(feld);
//setzt die Startposition
feld[zeile][spalte]=1;
loeseProblem(feld,1,1);
return feld;
}
//Rekursion
public static boolean loeseProblem(int[][] feld, int zeile, int spalte)
{
if (zeile > 7)
{
return false;
}
else
{
feld[zeile][spalte] = 1;
// Falls ergebnis erzielt
if (spalte == 7)
{
return true; // richtiges Ergebnis gefunden
}
else
{
boolean found = loeseProblem(feld, 1, spalte + 1);
if (found)
{
return true; // fertig, nicht Dame wieder löschen
}
// Schritt zurück
feld[zeile][spalte] = 0;
boolean found2 = loeseProblem(feld, zeile+1 , 1);
if (found2)
{
return true; // fertig, nicht Dame wieder löschen
}
// Schritt zurück
feld[zeile][spalte] = 0;
}
}
// vereinfachte weitere Suche
return loeseProblem(feld, zeile + 1, spalte) && loeseProblem(feld, 1, spalte + 1);
}
public static void gebeAus(int[][] f){
for(int i=0;i<f.length;i++){
for(int y=0;y<f[i].length;y++){
System.out.print(f[i][y]);
}
System.out.println();
}
}
public static void main(String[] args) {
gebeAus(loese(1, 4));
}
}