【问题标题】:Robotics Maze Representation in C [closed]C中的机器人迷宫表示[关闭]
【发布时间】:2016-05-18 15:25:27
【问题描述】:

所以我想使用 C 语言中的二维数组来表示一个尺寸为 5x4(行 x 列)的矩形迷宫。但是,我无法指定实际需要放入 2D 数组的内容。

int a[5][4] = {
    {},
    {},
    {},
    {},
    {}, 
};

这是 2D 数组的骨架,每行会有 4 个值,我假设每个值都是一个整数,它告诉我们迷宫中单元格的属性。我的问题是,这真的足够吗?单个值如何告诉机器人天气有 3 面墙、2 面墙等

有人请赐教D:

【问题讨论】:

  • 我将开始使用一个结构矩阵,该矩阵包含有关 N、S、W、E 墙的信息。
  • 作为一个在类似场景中使用过机器人的人,我希望你的机器人能够准确地转动 90 度。
  • @LPs 此信息可以很好地存储在 4 位内..
  • @schil227 Weel,这取决于平台。在嵌入式上,我会使用 bitfileds 标志。 ;)
  • 注意:您可以通过仅存储每个单元格的顶部和左侧墙壁,并在地图的右侧和底部添加 1 个单元格宽的边框来简化所有逻辑。

标签: c robotics


【解决方案1】:

为房间的特定属性使用特定位

#define ROOM_WALL_ABOVE (1 << 0)
#define ROOM_WALL_LEFT  (1 << 1)
#define ROOM_WALL_BELOW (1 << 2)
#define ROOM_WALL_RIGHT (1 << 3)
#define ROOM_DOOR       (1 << 4)

int a[5][4] = {0};
a[0][0] = ROOM_WALL_ABOVE | ROOM_WALL_LEFT;

if (a[x][y] & ROOM_WALL_RIGHT) printf("Cannot walk right.\n");

【讨论】:

【解决方案2】:

你可以使用结构矩阵

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

struct walls
{
    bool N; // true = wall false = no wall
    bool S; // true = wall false = no wall
    bool W; // true = wall false = no wall
    bool E; // true = wall false = no wall
};

int main()
{
    struct walls maze[5][4];

    // reset
    memset(maze, 0x00, sizeof(maze));

    // init
    maze[0][0].N = false;
    maze[0][0].S = true;
    maze[0][0].W = true;
    maze[0][0].E = false;

    // YOUR STUFF

   return 0;
}

【讨论】:

  • 哇,太棒了!很有意义谢谢!我现在唯一的问题是了解重置部分的作用? (对我来说是新语法 T_T)
  • 重置为0maze矩阵的所有字节,仅此而已。
  • 您为什么需要这样做?我想我对记忆部门缺乏了解。如果那是我,我可能会排除,以我目前对结构的理解。谢谢!
  • 如果你想从一个所有值都设置为 false 的干净矩阵开始,你需要它。否则,由于其本地范围(堆栈分配),它将保存随机值。顺便说一句,如果您的代码确保使用正确的初始化填充整个结构,您可以避免它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多