簡體   English   中英

代表迷宮

[英]Representing a maze

我將如何表示這個迷宮,以便可以在其上運行dijkstras算法?

迷宮

我一直在環顧四周,最常見的表示形式似乎是鄰接矩陣和鄰接列表。

所以:

1)我的頂點應該是什么?

2)我的邊緣應該是什么?

因為這將是一場比賽,所以迷宮是未知的。

3)如何更新矩陣?

注意:我們有機會探索迷宮,所以我將使用牆隨動件和一個映射器,該映射器可計算機器人從一開始的距離,但不確定如何將其轉化為任何用途建立矩陣。

例如,您可以將房間結構裝飾為:

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];

最初,機器人被放置在起跑室(有一顆星星)中。

然后,玩家可以通過按鍵或其他設備控制機器人的運動。
當機器人到達目標房間時,游戲結束。

當然,您可以通過某種算法找到一條路徑,然后將機器人引導至目標。

我將定義一個結構,該結構將迷宮的每個交點表示為一個節點,每個走廊以指向另一個節點的指針的形式分支為一個頂點。 應該采取以下措施:

#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];
};

將Dijkstra(或任何其他圖論算法)應用於此表示很簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM