calcular distancia entre casillas en java?

Iniciado por smasher666, 28 Abril 2009, 09:23 AM

0 Miembros y 1 Visitante están viendo este tema.

smasher666

Hola, estamos haciendo un tribial y nos ha surjido el siguiente problema: como podriamos calcular la distancia entre 2 casillas contando que no puede pasar por casillas en blanco??
si alguien se le ocurre , no solo en codigo java sino que incluso con alguna formula matematica nos iria bien, gracias

tablero:
              private char[][] mapa = {{'v','b','t','D','r','m','G','v','b','D','t','r','M'},
                      {'g','m',' ',' ',' ',' ','m',' ',' ',' ',' ','t','g'},
                      {'m',' ','r',' ',' ',' ','r',' ',' ',' ','b',' ','v'},
                      {'D',' ',' ','t',' ',' ','D',' ',' ','v',' ',' ','D'},
                      {'t',' ',' ',' ','b',' ','t',' ','g',' ',' ',' ','b'},
                      {'r',' ',' ',' ',' ','g','b','r',' ',' ',' ',' ','t'},
                      {'O','g','M','D','b','v','U','m','r','D','t','b','O'},
                      {'v',' ',' ',' ',' ','v','g','t',' ',' ',' ',' ','b'},
                      {'g',' ',' ',' ','t',' ','m',' ','m',' ',' ',' ','m'},
                      {'D',' ',' ','r',' ',' ','D',' ',' ','g',' ',' ','D'},
                      {'m',' ','m',' ',' ',' ','b',' ',' ',' ','v',' ','g'},
                      {'r','g',' ',' ',' ',' ','v',' ',' ',' ',' ','b','v'},
                      {'B','t','r','D','m','g','T','b','v','D','m','g','R'},};

las casillas en blanco son chars vacios


Sk9ITk5Z

oye a que te refieres con la distancia????
Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.

juancho77

Bien, no tienes un problema sencillo en frente. Te cuento que en programación existen Tipos de Datos llamados Mapas que simulan esto que tu quieres resolver. Deberias estudiarlos y te resultara mas sencillo.
Tambien puedes hacerlo por backtracking, agotando cada una de las posibilidades.
O tambien, y creo que lo mas sencillo, crear un mapa de grafos ponderados indicando la distancia entre cada uno y comparando entre ellos. Si es solo para ese mapa, es muy sencillo ya que los caminos son simetricos los mires por donde los mires.

Por ejemplo, si implementas una estructura que tenga un Nodo de Grafo por cada casilla permitida, la solución sería saltar desde el nodo inicial al siguiente, y de alli evaluar para donde seguir basandonse en x e y y la variacion. Una vez finalizado, guardamos y volvemos atras (backtracking), y empezamos de nuevo en otra direccion.
Al final, tomamos todo lo guardado y comparamos. El menor es la distancia minima entre los Nodos de Grafo.

Como dije, no es algo sencillo. Hay implementaciones mas rapidas tambien, pero no tan comunes e interesantes.

smasher666

gracias juancho voy a estudiar ambos casos y luego te cuento ;)