【问题标题】:Representing a maze代表迷宫
【发布时间】:2016-04-26 01:33:19
【问题描述】:

我将如何表示这个迷宫,以便我可以在上面运行 dijkstras 算法?

Maze

我一直在环顾四周,最常见的表示似乎是邻接矩阵和邻接表。

所以:

1) 我的顶点应该是什么?

2) 我的边缘应该是什么?

因为这将是一场比赛,所以迷宫是事先不知道的。

3) 如何更新我的矩阵?

注意:我们有机会探索迷宫,所以我将使用一个墙跟随器和一个映射器来计算机器人从一开始的距离,但不确定这将如何转化为构建矩阵时的任何用途。

【问题讨论】:

  • 这里不需要邻接矩阵列表;因为它是一个方形网格,所以坐标隐含了邻接关系。有一个 Squares 的 2D 数组,其中每个 Square 存储墙壁的哪一侧。
  • 如果其中一个答案回答了您的问题,请记得点击旁边的复选框接受它。

标签: c data-structures robotics


【解决方案1】:

例如,您可以将房间结构声明为:

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

最初,机器人被放到起始房间(有一颗星)。

然后玩家可以通过按键或其他设备控制机器人的运动。
当机器人到达目标房间时游戏结束。

当然你可以通过某种算法找到路径,然后引导机器人到达目标。

【讨论】:

  • 机器人的运动是如何转化为这个的?
  • @ScottHunter 这是什么意思?
  • 路径将由一系列方向组成。机器人可以按照指定的方向行走。
  • 你从几乎空洞的机器人描述中知道这一点?
  • @PanRuochen 不清楚您对房间的定义是什么(例如,所有示例都没有)
【解决方案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];
};

将 Dijkstra(或任何其他图论算法)应用于此表示很简单。

【讨论】:

  • 那么,问题是如何判断机器人在哪个路口;特别是,检测它何时重新访问了一个路口。
  • 这个案例没什么特别的。您可以将所需的任何元数据添加到连接结构(布尔值、红色/黑色枚举等)。问题不在于如何实现 Dijsktra。
  • 这些信息是如何从机器人传到你的数据结构中的?
  • 问题是如何表示迷宫。如何绘制迷宫是一个不同的问题,与所问的问题无关。
  • 因此,如果无法从可用信息中填充表示并不重要;很高兴知道。
猜你喜欢
  • 2020-06-14
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2021-06-25
相关资源
最近更新 更多