Hallo,
ich muss eine rekursive Methode schreiben
die alle magischen Quadrate für gegebene Kantenlänge N berechnet. Dabe bezeichnen i und j die Feldindizes des Quadrats und k die potentielle Belegung des Feldes
.Da keine Zahl k doppelt vorkommen darf,muss man einen Lösungskandidat verwerfen, sobald eine bereits verwendete Zahl ein zweites mal benutzt wird. Diese Information wird in Boolean-Array
vermerkt. Eine potentiell zulässige und vollständige Lösung wird geprüft wenn man in der unteren rechten Ecke des Quadrats ankommt-So die Aufgabenstellung.
Also:Ich habe auch andere Metoden:
1.
die den Quadrat ausgibt.
2.
die entscheidet ob ein quadrat magisch ist(prüft die Summen der Zeilen,Spalten,Haupt und nebendiagonalen, die dürfen nicht voneinander abeichen);
3.Und noch die
die ich nicht hinbekomme:
Ich bitte euch um hilfe wie kann ich die methode vervollständigen?
LG
ich muss eine rekursive Methode schreiben
Java:
void backtrack(nt i,int j,int k)
Java:
numbers[i][j]
Java:
boolean usedNumber[]
Also:Ich habe auch andere Metoden:
1.
Java:
showSquare()
2.
Java:
boolean canBeMagic(int I,int J)
3.Und noch die
Java:
void backtrack(nt i,int j,int k)
Java:
static void backtrack(int i, int j, int k) {
if (usedNumber[k])
return;
numbers[i][j] = k + 1;
usedNumber[k] = true;
int a=i; //hier ist vieles falsch :(
if(a==N)
return;
for(int b=j; b<N;b++){
numbers[a][b]=k+1;
}
if(canBeMagic(i,j)){
showSquare();
i++;
}else{
i++;
backtrack(i,j,k);
}
usedNumber[k] = false;
}
public static void main(String args[]) {
N = reader.nextInt();
numbers = new int[N][N];
usedNumber = new boolean[N * N];
int solutionCount[] = { 0, 1, 0, 8, 7040 };
for (int k = 0; k < N * N; k++) {
backtrack(0, 0, k);
}
System.out.println("correct solution count: "
+ (solutionCount[N] == solutionID));
}
}
LG