Función: Algoritmo A*Volver

Descripción

Aplica el algoritmo A* (Shortest Path Pathfinder) a un mapa dado por una matriz para encontrar el camino mínimo entre el nodo inicial y la meta

Cadena de entrada

aestrella

Cadena de salida

A*

Uso

aestrella(<mapa>,<método>[,<incluirMapa>])

Parámetros
# Parámetro Descripción Valor por defecto
1 mapa> Matriz del tamaño del mapa con los siguientes valores:
  • 0 para espacions vacíos
  • 1 para obstáculos
  • 2 para nodo inicial (único)
  • 3 para nodo final (único)
2 método
  • 'vecinos_8' para recorrer el camino incluyendo diagonales de 45º
  • 'vecinos_4' para recorrer el camino sólo en horizontal y vertical
  • 'vecinos_8_no_esquina' para recorrer el camino incluyendo diagonales de 45º si no atraviesan esquinas
3 incluirMapa Booleano. Si es verdadero incluye una representación del mapa como Texto verdadero

Valor devuelto

Diccionario con las claves…

Ejemplos

aestrella([[2,1,0,0,0,0,0,0],[0,1,1,0,1,1,0,0], [0,0,1,0,1,3,0,0], [0,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0]],'vecinos_8_no_esquina')

Diccionario: { 'camino': [[1,1],[1,2],[1,3],[2,4],[3,4],[4,5],[5,5],[6,5],[7,5],[8,5],[8,4],[8,3],[7,3],[6,3]] 'distancia': 13.8284273147583 'pasos': 13 'mapa': ' O [#] · · · · · · * [#][#] · [#][#] · · * · [#] · [#] X * * · * * · [#][#][#] * · · · * * * * * ' }

Salida en REPL:

>>> set mapa=[[2,1,0,0,0,0,0,0],[0,1,1,0,1,1,0,0], [0,0,1,0,1,3,0,0], [0,0,0,0,1,1,1,0], [0,0,0,0,0,0,0,0]]

	mapa ==> VectorEvaluado: 

		| 2  1  0  0  0  0  0  0 |
		| 0  1  1  0  1  1  0  0 |
		| 0  0  1  0  1  3  0  0 |
		| 0  0  0  0  1  1  1  0 |
		| 0  0  0  0  0  0  0  0 |


	(parse: 12ms(70%) / eval: 5,1ms(30%) / total: 17,1ms)

>>> eol + aestrella(mapa,'vecinos_8_no_esquina')><'mapa'

	 ==> Texto: '
 O [#] ·  ·  ·  ·  ·  · 
 * [#][#] · [#][#] ·  · 
 *  · [#] · [#] X  *  *  
 ·  *  *  · [#][#][#] *  
 ·  ·  ·  *  *  *  *  *  
'

	(parse: 9,8ms(74%) / eval: 3,4ms(26%) / total: 13,2ms)

>>> eol + aestrella(mapa,'vecinos_8')><'mapa'

	 ==> Texto: '
 O [#] ·  ·  *  *  ·  · 
 * [#][#] * [#][#] *  · 
 ·  * [#] * [#] X  ·  · 
 ·  ·  *  · [#][#][#] · 
 ·  ·  ·  ·  ·  ·  ·  · 
'

	(parse: 977µs(27%) / eval: 2,6ms(73%) / total: 3,6ms)


>>> eol + aestrella(mapa,'vecinos_4')><'mapa'

	 ==> Texto: '
 O [#] ·  *  *  *  *  · 
 * [#][#] * [#][#] *  · 
 *  * [#] * [#] X  *  · 
 ·  *  *  * [#][#][#] · 
 ·  ·  ·  ·  ·  ·  ·  · 
'

	(parse: 2,4ms(59%) / eval: 1,7ms(41%) / total: 4ms)

Desde / Última modificación

v0.6.2.4

Véase también…

gr_dijkstra, gr_floydwar