2008-09-17 7 views
29

¿Podemos hacer que la gente publique código de implementaciones simples y optimizadas del algoritmo de identificación de ruta A * en todos los idiomas?¿Cómo implemento un algoritmo de identificación de ruta A *, con los costos de movimiento para cada lenguaje de programación?

Esto es principalmente por diversión y para jugar con lo que stackoverflow es capaz de ... aunque en realidad estoy interesado en obtener una versión de ActionScript 3 de esto.

Pero la idea es que esta "Pregunta" continuará actualizándose eternamente en el futuro, ¡incluso cuando se creen diferentes lenguajes de programación!

No conozco ningún otro lugar en línea en el que pueda ver el pseudocódigo "traducido" en muchos (mucho menos cada) idioma diferente. Parece que es un recurso que vale la pena, y aunque no es necesariamente para lo que se diseñó este sitio, no hay problema en probarlo y ver si resulta ser algo valioso para que stackoverflow pueda ser utilizado.

+0

Probablemente sería mejor si diera más reglas básicas, como un campo de laberinto/obstáculo de "prueba". Idealmente, cada implementación encontraría la misma ruta o una lista breve muy común de posibles soluciones. –

+1

Sugiero una wiki de la comunidad. – strager

+0

@Ray Hayes, Tal vez no es la misma ruta (ya que puede haber varias rutas para el mismo objetivo), pero la misma ruta de longitud. – strager

Respuesta

5

Aquí hay un C# implementation hecho por una de las personas que construyen el lenguaje.

0

Implementación de VB6.

http://www.gandraxa.com/pathfinding_with_a_star.xml

Esto es particularmente útil porque se puede pasar por el proceso y obtener una buena comprensión de cómo funciona el algoritmo. Esto puede ser bastante valioso al convertir el algoritmo a otro idioma.

+0

¡Esta respuesta sufre de Link Rot como obtuvo 404! – t0mm13b

+0

todavía enlace podrido. –

+0

Solucionado cuando se acepta la edición. – Pip

11

Aquí es una JavaScript implementation, junto con source code y un online demo lo hice como un proyecto de manía/investigación.

Es muy simple, pero puede cambiar algunos de los parámetros (tamaño de cuadrícula, número de muros, información de depuración activada/desactivada). Le mostrará los valores f (x), g (x) y h (x) calculados para cada nodo que se inspecciona.

La implementación de la página de demostración usa jQuery.

+0

Tenga en cuenta que esto depende de jquery. – Sir

+3

La demostración depende de jQuery, el plugin en sí no lo es. Actualicé la respuesta para señalar la parte no dependiente más prominente –

1

Un Clojure aplicación, fuertemente basada en un ejemplo dado en PAIP.

1

No es una implementación, pero encontré que http://theory.stanford.edu/~amitp/GameProgramming/AStarComparison.html es una explicación particularmente clara del algoritmo. Tiene pseudocódigo que lo hace muy fácil de implementar, junto con una revisión extendida de varias estructuras de datos que se pueden usar para implementar los conjuntos cerrados &, una discusión de diferentes heurísticas que son aplicables en diferentes situaciones, modificaciones a la heurística para obtener comportamientos específicos (por ejemplo, obtener aproximaciones de líneas rectas en sistemas que solo admiten ángulos de movimiento limitados), dificultades comunes (por ejemplo, utilizar una heurística con una escala diferente a los costos de movimiento reales) y algunas optimizaciones (por ejemplo, trabajar con regiones de costo uniforme en lugar de cuadrícula).

3

códigos fuente y demostraciones en diferentes lenguajes de programación:

Lista de demostración de para cada idioma:

C++: 1 
Java: 3 
Processing: 1 
Actionscript 3 (Flash): 4 
Flex (Flash): 1 
Javascript: 6 
C#: 1 
Ruby: 1 
Prolog: 1 
Unity: 1 
Lua: 1 

Pathfinding Demo in different languages

Enjoy :)

1

Python and C++ source code junto con interactive tutorial. El código está escrito para trabajar en gráficos en general, y no es específico para grillas (como lo encontrará en muchos ejemplos de A * en la web). Utiliza montones binarios para la cola de prioridad (tanto Python como C++ tienen montones binarios en sus bibliotecas estándar). Tengo la Primera búsqueda de ancho, el Algoritmo de Dijkstra y A * en esa página. El código es razonablemente corto (más corto que la mayoría del código de muestra A * que encuentro).

Cuestiones relacionadas