[英]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.