Guenas.
Podrías usar el algoritmo A* .
Hace algún tiempo realice una implementación del algoritmo y no lo vi excesivamente difícil.
En mi caso la hice independiente del número de dimensiones y topología de los nodos, orientándola a conseguir una elevada velocidad a costa de consumir mas memoria, pero el algoritmo es fácil de implementar orientándolo a un bajo consumo.
Un saludo
Buenos dias,
Estoy trabajando en un pequeño programilla para unir 2 puntos definidos por coordenadas (x,y).
En principio es fácil unirlos sin ningún tipo de obstáculo.
Sin embargo .. si añadimos obstáculos a la ecuación de tal modo que tenemos una zona tal que :
PtoA X X X X X X X
X X X X X X X X X X
X X X X..................
X X X X X X X X X X
.......... XXXXXXXXX
XXXXXXXXXXXXXX
XXXXXX.................
XXXXXXXXXXXXXX
PtoBXXXXXXXXXXX
Pudiendo navegar por las X para llegar de un PtoA al PtoB.
por poner un ejemplo, tendria un vector de coordenadas :
v1.add(new Coordenadas(92,39));
v1.add(new Coordenadas(92,40));
v1.add(new Coordenadas(92,41));
v1.add(new Coordenadas(92,42));
v1.add(new Coordenadas(92,43));
v1.add(new Coordenadas(92,44));
v1.add(new Coordenadas(92,46));
v1.add(new Coordenadas(92,47));
v1.add(new Coordenadas(92,48));
v1.add(new Coordenadas(92,49));
v1.add(new Coordenadas(92,50));
v1.add(new Coordenadas(93,39));
v1.add(new Coordenadas(93,40));
v1.add(new Coordenadas(93,41));
v1.add(new Coordenadas(93,42));
v1.add(new Coordenadas(93,43));
v1.add(new Coordenadas(93,44));
v1.add(new Coordenadas(93,46));
v1.add(new Coordenadas(93,47));
v1.add(new Coordenadas(93,48));
v1.add(new Coordenadas(93,49));
v1.add(new Coordenadas(93,50));
v1.add(new Coordenadas(94,39));
v1.add(new Coordenadas(94,40));
v1.add(new Coordenadas(94,41));
v1.add(new Coordenadas(94,42));
v1.add(new Coordenadas(94,43));
v1.add(new Coordenadas(94,44));
v1.add(new Coordenadas(94,46));
v1.add(new Coordenadas(94,47));
v1.add(new Coordenadas(94,49));
v1.add(new Coordenadas(94,50));
v1.add(new Coordenadas(95,39));
v1.add(new Coordenadas(95,42));
v1.add(new Coordenadas(95,43));
v1.add(new Coordenadas(95,44));
v1.add(new Coordenadas(95,46));
v1.add(new Coordenadas(95,47));
v1.add(new Coordenadas(95,49));
v1.add(new Coordenadas(95,50));
v1.add(new Coordenadas(96,39));
v1.add(new Coordenadas(96,41));
v1.add(new Coordenadas(96,42));
v1.add(new Coordenadas(96,43));
v1.add(new Coordenadas(96,44));
v1.add(new Coordenadas(96,46));
v1.add(new Coordenadas(96,47));
v1.add(new Coordenadas(96,49));
v1.add(new Coordenadas(96,50));
v1.add(new Coordenadas(97,39));
v1.add(new Coordenadas(97,41));
v1.add(new Coordenadas(97,42));
v1.add(new Coordenadas(97,43));
v1.add(new Coordenadas(97,44));
v1.add(new Coordenadas(97,46));
v1.add(new Coordenadas(97,47));
v1.add(new Coordenadas(97,49));
v1.add(new Coordenadas(97,50));
v1.add(new Coordenadas(98,39));
v1.add(new Coordenadas(98,41));
v1.add(new Coordenadas(98,42));
v1.add(new Coordenadas(98,43));
v1.add(new Coordenadas(98,44));
v1.add(new Coordenadas(98,45));
v1.add(new Coordenadas(98,46));
v1.add(new Coordenadas(98,47));
v1.add(new Coordenadas(98,49));
v1.add(new Coordenadas(98,50));
v1.add(new Coordenadas(99,39));
v1.add(new Coordenadas(99,42));
v1.add(new Coordenadas(99,43));
v1.add(new Coordenadas(99,44));
v1.add(new Coordenadas(99,45));
v1.add(new Coordenadas(99,46));
v1.add(new Coordenadas(99,47));
v1.add(new Coordenadas(99,49));
v1.add(new Coordenadas(99,50));
v1.add(new Coordenadas(100,39));
v1.add(new Coordenadas(100,41));
v1.add(new Coordenadas(100,42));
v1.add(new Coordenadas(100,43));
v1.add(new Coordenadas(100,44));
v1.add(new Coordenadas(100,45));
v1.add(new Coordenadas(100,46));
v1.add(new Coordenadas(100,47));
v1.add(new Coordenadas(100,49));
v1.add(new Coordenadas(100,50));
Y quisiera saber si existe alguna clase para recorrerlo y llegar de un punto :
pto1 = new Coordenadas(92,39);
a otro
pto2= new Coordenadas(100,50);
Pudiendo navegar solo por las coordenadas que almacena mi vector, lo que implica tener que hacer un zig zag.
No se si me he explicado bien en lo que trato de hacer.
Muchisimas gracias por vuestra ayuda.