3

ボードを移動できるようにするには、C プログラムが必要です。ボードは 2D int 配列で表されます (0 と 7 は空の正方形で、それ以外はすべて障害物です)。あるマスから別のマスに移動するコストは常に同じですが、斜めに移動するべきではありません。

私は A* を調べてきましたが、紛らわしく、見つけることができるすべての例は C++ または Java を使用しているため、C でも可能かどうか疑問に思い始めています。

それと、それがそれに使用するのに最適なアルゴリズムである場合。

編集: ボードは 24x25 または 25x24 のどちらかです。どちらか思い出せません

4

1 に答える 1

1

ボードが小さいため、最適なパスを完全に検索する幅優先検索 (BFS)を使用できます。A* アルゴリズムよりも優れていなくても、パフォーマンスは同等になると思います。

アルゴリズムは A* よりも単純で、インターネット上で C の実装が多数あります。グリッド上の BFS 横断の例を次に示します。

グリッド上の BFS 横断の図。 すべての正方形が到達可能である場合、中心からの距離は示されているものです。

パスを取得するには、行列を保存できます (たとえば、char の 2 次元配列 -- 名前を付けましょうparent)。parent[x][y]たとえば、(0 - 左からその正方形に到達した場合、1 - 右、2 - 上、3 - 下) )。たとえば、座標 (4,6) の正方形にアクセスし、(5,6) をキューに入れる場合、 parent[5][6] = 2(5,6) は (4,6) の上の行から来たためです。したがって、完全なパスを取得するには、宛先ノードを選択しparents、ソース スクエアに到達するまで座標を保存します。

それをどのように実装できるかを考え、理解するのはあなた次第です:)

于 2012-10-24T06:12:30.940 に答える