int weltw,welth;//breite,höhe der welt in feldern
int startx,starty;//x,y wo dein weg losgehen soll
int zielx,ziely;//x,y wo es hingehen soll
boolean[][] begehbar=new boolean[weltb][welth];
//hier code ausgelassen. ordne hier jedem feld in der welt ein boolean zu, das genau dann false ist, wenn das feld nicht begehbar ist; damit das programm nicht abstürzt, müssen alle randfelder unbegehbar sein.
byte[][] richtung=new byte[weltb][welth];
//hier code ausgelassen. alle auf 0 setzen;
final byte VONOBENLINKS=1, VONOBEN=2, VONOBENRECHTS=3, VONLINKS=4, VONRECHTS=5, VONUNTENLINKS=6, VONUNTEN=7, VONUNTENRECHTS=8;
Vector vx=new Vector();
Vector vy=new Vector();
//die vector methoden weis ich jetzt nicht. ich schreibe mal void v.tudazu(int i), dafür das [b]ans ende[/b] i drangehängt wird und int v.nehmweg() dafür, dass [b]am anfang[/b] etwas (also das erste element) weggenommen wird.
int tempx=zielx,tempy=ziely;
while(tempx!=startx || tempy!=starty){
if(begehbar[tempx-1][tempy-1] && richtung[tempx-1][tempy-1]==0){
richtung[tempx-1][tempy-1]=VONUNTENRECHTS;
vx.tudazu(tempx-1);
vy.tudazu(tempy-1);
}
if(begehbar[tempx][tempy-1] && richtung[tempx][tempy-1]==0){
richtung[tempx][tempy-1]=VONUNTEN;
vx.tudazu(tempx);
vy.tudazu(tempy-1);
}
if(begehbar[tempx+1][tempy-1] && richtung[tempx+1][tempy-1]==0){
richtung[tempx+1][tempy-1]=VONUNTENLINKS;
vx.tudazu(tempx+1);
vy.tudazu(tempy-1);
}
if(begehbar[tempx-1][tempy] && richtung[tempx-1][tempy]==0){
richtung[tempx-1][tempy]=VONRECHTS;
vx.tudazu(tempx-1);
vy.tudazu(tempy);
}
if(begehbar[tempx+1][tempy] && richtung[tempx+1][tempy]==0){
richtung[tempx+1][tempy]=VONLINKS;
vx.tudazu(tempx+1);
vy.tudazu(tempy);
}
if(begehbar[tempx-1][tempy+1] && richtung[tempx-1][tempy+1]==0){
richtung[tempx-1][tempy+1]=VONOBENRECHTS;
vx.tudazu(tempx-1);
vy.tudazu(tempy+1);
}
if(begehbar[tempx][tempy+1] && richtung[tempx][tempy+1]==0){
richtung[tempx][tempy+1]=VONOBEN;
vx.tudazu(tempx);
vy.tudazu(tempy+1);
}
if(begehbar[tempx+1][tempy+1] && richtung[tempx+1][tempy+1]==0){
richtung[tempx+1][tempy+1]=VONOBENLINKS;
vx.tudazu(tempx+1);
vy.tudazu(tempy+1);
}
tempx=vx.nehmweg();
tempy=vy.nehmweg();
}
//code ausgelassen. schreib dir ne methode, die in einem fenster für jedes feld optisch die richtung zeigt, in die quasi richtung[feldx][feldy] zeigt. dann siehste, wo der kürzeste weg langgeht. jetzt musste nur noch eine methode schreiben die den weg in irgendeinem objekt speichert. das sei dir überlassen. die maximale zeitkomplexität dieses algorithmus ist gleich der anzahl der felder die es in der welt gibt.