H
Han
Gast
Hallo....tüftle schon eine Weile an dem Problem einen kürzesten Weg durch ein Labyrinth zu finden bin aber bis jetzt noch auf keine Lösung gekommen...
Hier mein Code:
Der Algorithmus findet einen Weg durch das Labyrinth aber halt nicht den Kürzesten.
Ich weiß dass das mit der Breitensuche funktioniert...
Funktioniert die Breitensuche im Labyrinth so dass ich wenn ich auf einem freien Kästchen stehe zuerst einmal alle Möglichkeiten (also nach unten, rechts, links, oben) durchgehe und da wos geht markiere ich die Stelle. dadurch entstehen sozudagen mehrere "Teams" die nach einem Ausgang suchen und wenn ein Team den Ausgang als erstes gefunden hat ist dies der kürzeste Weg.
...jetzt haperts nur noch mit der Einbindung in Java...
Bitte keine Verweise auf google oder derartiges denn ich hab schon zur Genüge auf google gesucht und nichts Brauchbares gefunden.....
mfg,
Hannes
[/code]
Hier mein Code:
Code:
//Liste zur Erstellung der einzelnen Wegpfade
//---------------------------------------------------------
class Node{
int x;
int y;
Node next;
Node(int x,int y){
this.x = x;
this.y = y;
next = null;
}
}
class List{
Node head = null;
void insert(int x, int y){
Node p = new Node(x,y);
p.next = head;
head = p;
}
void print() {
Node p = head;
IO.writeLn("Weg:");
while (p != null) {
IO.write("(" + p.x + "," + p.y + ")");
p = p.next;
}
}
}
//----------------------------------------------------------
public class labyrinth{
static int zaehler = 0;
static List path = new List();
static boolean canExit(char[][] maze, int i, int j, int n){
if(i < 0||j < 0||i == n||j == n) return false; //outside the maze
if(maze[i][j] != ' ') return false; //bumped against a wall or already visited
maze[i][j] = '.';
zaehler++;
if(i == n-1 && j == n-1 //already at the goal?
|| canExit(maze,i+1,j,n) //can we find the exit if we go down?
|| canExit(maze,i,j+1,n) //can we find the exit if we go right?
|| canExit(maze,i-1,j,n) //can we find the exit if we go up?
|| canExit(maze,i,j-1,n)){ //can we find the exit if we go left?
IO.write("("+i+","+j+")"); //print the field as part of the right way
path.insert(i,j);
return true;
}
return false;
}
public static void main(String[] args){
char[][] maze = {{' ','X',' ',' ',' '},
{' ',' ',' ','X',' '},
{' ','X',' ','X',' '},
{' ','X',' ','X',' '},
{' ',' ',' ','X',' '}};
char[][] maze2 ={{' ','X',' ','X',' ',' ',' '},
{' ','X',' ',' ',' ','X',' '},
{' ',' ','X','X',' ','X',' '},
{'X',' ',' ',' ',' ','X',' '},
{' ',' ',' ','X',' ','X',' '},
{'X','X',' ',' ',' ','X',' '},
{' ','X','X','X','X','X',' '}};
canExit(maze,0,0,5);
path.insert(-1,-1);
path.print();
}
}
Der Algorithmus findet einen Weg durch das Labyrinth aber halt nicht den Kürzesten.
Ich weiß dass das mit der Breitensuche funktioniert...
Funktioniert die Breitensuche im Labyrinth so dass ich wenn ich auf einem freien Kästchen stehe zuerst einmal alle Möglichkeiten (also nach unten, rechts, links, oben) durchgehe und da wos geht markiere ich die Stelle. dadurch entstehen sozudagen mehrere "Teams" die nach einem Ausgang suchen und wenn ein Team den Ausgang als erstes gefunden hat ist dies der kürzeste Weg.
...jetzt haperts nur noch mit der Einbindung in Java...
Bitte keine Verweise auf google oder derartiges denn ich hab schon zur Genüge auf google gesucht und nichts Brauchbares gefunden.....
mfg,
Hannes
[/code]