2016-04-26 10 views
0

私はこの迷路をどのように表していますか?そのため、私はdijkstrasアルゴリズムを実行できますか?迷路を表現する

Maze

私は周りを探してきた、そして最も一般的な表現は隣接行列と隣接リストであるように見えます。

So:

1)頂点は何ですか?

2)私のエッジは何ですか?

レースになるので、迷路は手前では分かりません。

3)マトリックスを更新するにはどうすればよいですか?

注:私たちは迷路を探索するチャンスを与えられているので、ロボットが最初からどの距離にあるかを計算するマッパーと一緒にウォールフォロワーを使用しますマトリックスを構築する際の任意の用途の

+0

ここでは、隣接行列*または*リストは必要ありません。それは正方形のグリッドなので、隣接関係は座標によって暗示されます。正方形の2D配列を持ち、各Squareには壁のある辺が格納されています。 – immibis

+0

回答の1つがあなたの質問に答えた場合は、その横のチェックボックスをクリックして回答を受け入れてください。 –

答えて

-1

たとえば、として部屋の構造をdeclaesことができます。

struct tRoom { 
    enum { 
     NORTH, 
     EAST, 
     SOUTH, 
     WEST 
    }; 
    int walls[4]; /* status: 0 -- The wall is open 
          1 -- The wall is close 
        */ 
    ... 
} 

/* A room in the game looks like: 

     ____ The wall is close and cannot walk through 
     | 
     | 
     v 
    +-----+ 
    |  | 
    | 
    |  | 
    +- -+ 
    ^
     | 
     |____ The wall is open and can walk through 

*/ 

/* A maze looks like : 

    +-----+-----+-----+ 
    |  |  |  | 
    | *    | 
    |  |  |  | 
    +- -+-----+- -+ 
    |  |  |  | 
    |  |  |  | 
    |  |  |  | 
    +-----+-----+-----+ 
*/ 

としてあなたの迷路を宣言します。

struct tRoom[WIDTH][HEIGHT]; 

当初ロボットは(星を持っている)の出発部屋に置かれています。

プレーヤーは、キーを押すなどの操作でロボットの動きを制御できます。
ロボットはゴールルームに到達するとゲームが終了します。

確かに、いくつかのアルゴリズムでパスを見つけ、ロボットを目標に導くことができます。

+0

ロボットの動きはどのようにこれに変換されますか? –

+0

@ScottHunterそれはどういう意味ですか? – immibis

+0

パスは一連の方向で構成されます。ロボットは指定された方向に歩くことができます。 –

-2

私は、迷路の各ジャンクションをノードとして表現する構造体を定義します。各構造体は、別のノードへのポインタの形で頂点として分岐します。以下に沿って何かがそれを行うべき:

#define MAX_VERTEXES_PER_NODE 4 

struct junction; 

struct corridor { 
    int weight; 
    struct junction *other_end; 
}; 

struct junction { 
    struct corridor junctions[MAX_VERTEXES_PER_NODE]; 
}; 

この表現にダイクストラ(またはその他のグラフ理論のアルゴリズム)を適用することは簡単です。

+0

問題は、ロボットがどのジャンクションにいるのかを知る方法です。特に、ジャンクションにいつ再訪したかを検出する。 –

+0

これはこの場合特別なものではありません。必要なメタデータを接合構造体に追加することができます(bool、red/black color enumなど)。問題はDijsktraの実装方法ではありませんでした。 –

+0

この情報はどのようにしてロボットからあなたのデータ構造に送られますか? –