A *パスファインディングアルゴリズムのシンプルで最適化された実装のコードをすべての言語で投稿してもらうことはできますか?
これは、おもしろくて、stackoverflow自体ができることで遊ぶためのものです...私は実際にこれのActionScript 3バージョンを取得することに興味があります。
しかし、考え方は、この「質問」は、異なるプログラミング言語が作成されても、将来にわたって永遠に更新され続けるということです!
疑似コードが多くの(はるかに少ない)言語に「翻訳」されているところをオンラインで確認できる他の場所は知りません。それは価値のあるリソースのようであり、必ずしもこのサイトが設計されたものではありませんが、それを試してみて、stackoverflowを使用できる価値のあるものであることが判明しても害はありません!
これが JavaScriptの実装 と ソースコード および オンラインデモ です。私は趣味/研究プロジェクトとして行いました。
非常にシンプルですが、一部のパラメーター(グリッドサイズ、壁の数、デバッグ情報のオン/オフ)を変更できます。検査された各ノードの計算されたf(x)、g(x)、およびh(x)の値が表示されます。
デモページの実装はjQueryを使用しています。
これがC++実装です。現在では十分にテストされており、商用ビデオゲームやさまざまなAIプロジェクトで使用されています。
http://code.google.com/p/a-star-algorithm-implementation/
そして、私が実際に最初に書いたチュートリアルがあります:
これが C#実装 であり、言語を構築する人の1人によって行われます。
さまざまなプログラミング言語でのソースコードとデモ:
各言語のデモのリスト:
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
楽しい :)
PythonおよびC++ソースコード とともに インタラクティブチュートリアル 。このコードは、一般的にグラフで機能するように作成されており、グリッドに固有のものではありません(Web上のA *の多くの例に見られるように)。優先度キューにバイナリヒープを使用します(PythonとC++は両方とも標準ライブラリにバイナリヒープを持っています)。そのページに幅優先検索、ダイクストラのアルゴリズム、A *があります。コードはかなり短い(私が見つけるほとんどのA *サンプルコードより短い)。
AS 3の例... http://www.dauntless.be/astar/
実装ではありませんが、 http://theory.stanford.edu/~amitp/GameProgramming/AStarComparison.html がアルゴリズムの特に明確な説明であることがわかりました。オープンセットとクローズドセットの実装に使用できるさまざまなデータ構造の拡張レビュー、さまざまな状況に適用できるさまざまなヒューリスティックの説明、特定の動作を実現するためのヒューリスティックの変更に加えて、実装を非常に簡単にする疑似コードがあります。 (たとえば、限られた角度の動きしかサポートしないシステムで直線の近似を取得)、一般的な落とし穴(たとえば、実際の移動コストとは異なるスケールのヒューリスティックを使用)、およびいくつかの最適化(たとえば、グリッド)。
Clojure の実装。大幅に [〜#〜] paip [〜#〜] の例に基づいています。
VB6実装。
http://www.gandraxa.com/pathfinding_with_a_star.xml
これは、プロセスをステップ実行して、アルゴリズムのしくみをよく理解できるため、特に役立ちます。これは、アルゴリズムを別の言語に変換するときに非常に役立ちます。
Cを学ぶ方法としてCにA *を実装したので、それが美しいとは保証できませんが、動作します!私はこれを使用してProject Euler#83を解決し、2つのテストケースで機能しました。
https://github.com/PeterMitrano/A-star-Pathfinding/blob/master/problem_83.c
最適化された Java実装 がGraphHopperで利用可能です。