Problema adyacencia de celdas en A Star search java

MrAw3s0m3

Buenas,

Estoy haciendo un ejercicio que consiste en una sala con celdas. Por algunas puedes pasar (marcadas con un '1') y por otras no (marcadas con un '0'). Tienes un sitio por el que comienzas, 0.0, y uno por donde sales y tienes que buscar el camino.

Buscando un poco por internet encontre el algoritmo A Star y lo aplique y modifique para mi caso particular, pero el problema es que no consigo crear adyacencias entre celdas.

Si por ejemplo la sala fuera tal que asi:

1 0 0 0
1 0 0 0
1 0 0 0
1 1 1 1

Y tuviera que ir del 0.0 al 3.3 el camino obvio seria el de todo unos. Cuando creo cada una de las celdas para hacer una adyacencia entre ellas leo el contenido de la celda de abajo y de la derecha y si contienen un uno las hago adyacentes la una con la otra añadiendolas a un HashSet (o arraylist esto no importaria mucho).

Al ejecutarlo no me funciona, y haciendo un println del tamaño de cada uno de los hashset de cada celda da 0, por lo que no he conseguido añadir ninguna adyacencia.

No se muy bien si el problema estara ahi o en otra parte del codigo. Puedo pegarlo si hace falta.

Gracias.

elkaoD

#1 código! :)

1 respuesta
MrAw3s0m3

#2

Clase Casilla:

spoiler

Clase Central:

Es un poco lioso pero espero que se entienda! :)

1 respuesta
elkaoD

#3 resúmelo un poco please. Quita lo que ya hayas comprobado que funciona bien y/o indica donde falla :)

Puedes dejar el código completo, pero una versión aparte resumida con justo la parte que falla viene bien.

1 respuesta
MrAw3s0m3

#4 ok, lo que creo que falla es esto:

spoiler

Edit: a base de system.out.println vi que no se añadia ninguna casilla al array de adyacencias ni nada y no se por que. La unica condicion que pongo es que el contenido de la celda sea = 1 (aunque ahora lo tenga comentado para que se añadiesen todas, pero ni con esas).

1 respuesta
Mewtwo

#5 ¿tienes que buscar solo un camino ? ¿o todos los posibles a la salida ?

¿segun me imagino el resultado quieres guardarlo en una matriz de tla forma que vas accediendo casilla a casilla ?

es decir puede que equivoque xD pero segun lo que creo que intentas es buscar el mejor camino en un laberinto.

TicTaK

#1 te falla el algoritmo por todos lados, principalmente por que lo intentas hacer iterativo y te vas a volver loco.

el algoritmo que necesitas es un algoritmo de backtracking ( RECURSION ), y una solucion como consecuencia de decisiones, y como si no sabes de lo que te hablo me voy a volver loco explicandolo si quieres te mando un pdf de como se soluciona ese problema exactamente, pasame tu correo

Usuarios habituales

  • TicTaK
  • Mewtwo
  • MrAw3s0m3
  • elkaoD