Hallo!
Ich versuche gerad das Springerproblem zu lösen. Die Rekursion an sich steht, jedoch ist irgendwo der Wurm versteckt, den ich nicht finden kann.
Das Problem ist nun, dass die Methode durchläuft, aber Ich keine Ergebnisse in meine results ArrayList bekomme.
Die Anwendung schaut so aus:
Vielleicht sieht ja jemand von euch den Fehler!
Grüße
Felix
Ich versuche gerad das Springerproblem zu lösen. Die Rekursion an sich steht, jedoch ist irgendwo der Wurm versteckt, den ich nicht finden kann.
Das Problem ist nun, dass die Methode durchläuft, aber Ich keine Ergebnisse in meine results ArrayList bekomme.
Die Anwendung schaut so aus:
Code:
import java.util.ArrayList;
import java.util.List;
public class Knightproblem {
public static void main(String[] args) {
Solver solver = new Knightproblem().new Solver();
System.out.println("Anzahl Lösungen: "+ solver.getResultCount());
System.out.println("\n"+ solver.getResultFields());
}
class Solver {
private List<int[][]> results = null;
private final int size = 6;
private int[][] jumps = { {-1,2}, {-2,1}, {1,-2}, {2,1}, {-1,-2}, {-2,-1}, {1,2}, {2,-1} };
public Solver() {
this.results = new ArrayList<int[][]>();
this.doIt(0, 0, new int[size][size], 1);
}
private void doIt(int x, int y, int[][] visited, int jump) {
if(jump > (visited.length*visited.length)) {
results.add(cloneField(visited));
return;
}
for(int i=0; i<8; i++) {
if((x+jumps[i][0]) > -1 && (y+jumps[i][1]) > -1 && (x+jumps[i][0]) < visited.length && (y+jumps[i][1]) < visited.length) {
if(visited[x+jumps[i][0]][y+jumps[i][1]] == 0) {
visited[x][y] = jump;
doIt((x+jumps[i][0]), (y+jumps[i][1]), visited, jump+1);
visited[x][y] = 0;
}
}
}
}
private int[][] cloneField(int[][] visited){
int[][] clone = new int[size][size];
for(int i=0; i<size; i++){
clone[i] = visited[i].clone();
}
return clone;
}
public String getResultFields(){
String returnString = "";
for(int[][] field : results) {
for(int[] row : field) {
for(int col : row) {
returnString += (col +"\t");
}
returnString += "\n";
}
returnString += "\n";
}
return returnString;
}
public int getResultCount() {
return results.size();
}
}
}
Vielleicht sieht ja jemand von euch den Fehler!
Grüße
Felix