Langsam fängt Rekursion an zu nerfen.
Aufgabe ist es ein vorgegebenes Labyrinth zu erbauen.
Dann es in boolean umzuwandeln wobei die Wände(*) false sind und Gänge(_) true sind.
Das hat auch geklappt, habe auch eine möglichkeit eingebaut das Labyrinth ausgeben zu lassen.
Jetzt müssen wir mit Rekursion durch das Labyrinth durchgehen und den AUsgang finden.
Aber mein Programm gibt immer nur true aus, obwohl er auch false ausgeben müsste (habe den Ausgang blockiert und nochmal probiert.
Code:
public class Labyrinth {
// Methode erzeugt ein Labyrinth
private static boolean[][] createLab(int n){
char[][]lab=new char[n+1][n+1];
return fillLab(n, lab);
}
// Labyrinth wird mit Zeichen gefüllt
private static boolean[][] fillLab(int n, char[][]lab){
for (int i=0;i<9;i++){
for (int k=0;k<9;k++){
if ((i==0)||(i==8)||(k==0)||(k==8)||(i==2&&(k==1||k==2||k==4||k==6||k==7))||(i==3&&(k==2||k==4))||(i==4&&(k==2||k==3||k==4||k==5||k==6))||(i==6&&(k==2||k==3||k==4||k==6||k==7))||(i==7&&k==4)){
lab[i][k]='*';
}
else{
lab[i][k]='_';
}
}
}
lab[1][1]='E';
lab [n-1][n-1]='A';
//Optionale Ausgabe des Labyriths
// for (int o=0;o<9;o++){
// for(int p=0;p<9;p++){
// System.out.print(lab[o][p]);
// if (p==8)
// System.out.println();
// }
// }
return booleanLab(lab);
}
// Zeichen Labyrinth wird durch ein Boolean Labyrinth ersetzt
private static boolean[][] booleanLab(char[][]lab){
boolean[][]blab=new boolean[9][9];
for (int i=0;i<9;i++){
for (int k=0;k<9;k++){
if (lab[i][k]=='*'){
blab[i][k]=false;
}else{
blab[i][k]=true;
}
}
}
return blab;
}
private static boolean findExit(boolean[][]lab, int inI, int inK, int exitI, int exitK){
int right = inK+1;
int left = inK-1;
int down = inI+1;
int up = inI-1;
if (lab[inI][right]){
if (lab[inI][right]==lab[exitI][exitK])
return true;
else
findExit(lab,inI,right,exitI,exitK);
}
if (lab[inI][left]){
if (lab[inI][left]==lab[exitI][exitK])
return true;
else
findExit(lab,inI,left,exitI,exitK);
}
if (lab[down][inK]){
if (lab[down][inK]==lab[exitI][exitK])
return true;
else
findExit(lab,down,inK,exitI,exitK);
}
if (lab[up][inK]){
if (lab[up][inK]==lab[exitI][exitK])
return true;
else
findExit(lab,up,inK,exitI,exitK);
}
return false;
}
public static void main(String []args){
System.out.print(findExit(createLab(8),1,1,7,7));
}
}