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