2008-09-17 15 views
29

Possiamo far sì che le persone pubblichino codice di implementazioni semplici e ottimizzate dell'algoritmo A * Pathfinding, in ogni singola lingua?Come implementare un algoritmo A * Pathfinding, con costi di movimento per ogni linguaggio di programmazione?

Questo è principalmente per divertimento e per giocare con ciò che stackoverflow è in grado di ... anche se in realtà sono interessato a ottenere una versione di ActionScript 3 di questo.

Ma l'idea è che questa "Domanda" continuerà ad essere aggiornata eternamente nel futuro, anche se vengono creati diversi linguaggi di programmazione!

Non conosco nessun altro posto online in cui è possibile vedere lo pseudocodice "tradotto" in molte (molto meno ogni) lingua diversa. Sembra che sia una risorsa utile, e anche se non necessariamente ciò per cui questo sito è stato progettato, non c'è nulla di male nel provarlo e vedere se si rivela essere una cosa utile che lo stackoverflow potrebbe essere utilizzato per!

+0

Probabilmente sarebbe meglio se tu avessi dato più regole di base come un labirinto/ostacolo "test". Idealmente, ogni implementazione troverà la stessa strada o una breve lista molto comune di possibili soluzioni! –

+1

Suggerisco una wiki della comunità. – strager

+0

@Ray Hayes, Forse non lo stesso percorso (in quanto possono esserci più percorsi per lo stesso obiettivo), ma la stessa lunghezza percorso. – strager

risposta

5

Ecco uno C# implementation eseguito da una delle persone che costruiscono la lingua.

0

Un'implementazione VB6.

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

Ciò è particolarmente utile perché si può fare un passo attraverso il processo e ottenere una buona comprensione di come funziona l'algoritmo. Questo può essere molto utile quando si converte l'algoritmo in un'altra lingua.

+0

Questa risposta soffre di link rot come ottenuto 404! – t0mm13b

+0

ancora link marcio. –

+0

Riparato quando la modifica è accettata. – Pip

11

Ecco una JavaScript implementation, insieme a source code ed un online demo ho fatto come un progetto hobby/di ricerca.

È molto semplice, ma è possibile modificare alcuni parametri (dimensione della griglia, numero di muri, informazioni di debug on/off). Ti mostrerà i valori calcolati di f (x), g (x) e h (x) per ogni nodo ispezionato.

L'implementazione della pagina demo utilizza jQuery.

+0

Nota: jQuery è affidabile. – Sir

+3

La demo è basata su jQuery, il plugin stesso non lo è. Ho aggiornato la risposta per indicare la parte non dipendente in modo più evidente –

1

A Clojure implementazione, fortemente basato su un esempio dato in PAIP.

1

Non un'implementazione, ma ho trovato http://theory.stanford.edu/~amitp/GameProgramming/AStarComparison.html una spiegazione particolarmente chiara dell'algoritmo. Ha uno pseudocodice che lo rende molto facile da implementare, insieme a una revisione estesa delle varie strutture dati che possono essere utilizzate per implementare gli insiemi aperti &, una discussione di diverse euristiche applicabili in situazioni diverse, modifiche all'euristica per ottenere comportamenti specifici (ad esempio ottenere approssimazioni di linee rette in sistemi che supportano solo angoli di movimento limitati), insidie ​​comuni (ad esempio utilizzando un'euristica con una scala diversa rispetto ai costi di movimento effettivi) e alcune ottimizzazioni (ad esempio, lavorare con regioni di costo uniforme piuttosto che un griglia).

3

codici sorgente e dimostrazioni in diversi linguaggi di programmazione:

Elenco dei demo per ogni lingua:

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 con interactive tutorial. Il codice è scritto per funzionare su grafici in generale e non è specifico per le griglie (come si troverà in molti esempi di A * sul web). Usa gli heap binari per la coda di priorità (sia Python che C++ hanno un heap binario nelle loro librerie standard). Ho una ricerca per ampiezza, l'algoritmo di Dijkstra e A * su quella pagina. Il codice è ragionevolmente breve (più corto della maggior parte del codice di esempio A * che trovo).

Problemi correlati