代表一个迷宫

时间:2016-04-26 01:33:19

标签: c data-structures robotics

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

Maze

我一直在寻找,最常见的表示似乎是邻接矩阵和邻接列表。

所以:

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

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

因为这将是一场比赛,所以迷宫之前并不为人所知。

3)如何更新矩阵?

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

2 个答案:

答案 0 :(得分:-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];

最初将机器人放到起始室(有星星)。

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

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

答案 1 :(得分:-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(或任何其他图论算法)应用于此表示是直截了当的。