根据这个网站,我希望代表一个具有16位整数的二维数组的迷宫.
每个16位整数需要包含以下信息:
这是一种方法(这绝不是唯一的方法):12x16迷宫网格可以表示为16位整数的数组m [16] [12].每个数组元素都包含网格中单个相应单元格的所有信息,整数位映射如下:
(来源:mazeworks.com)要击倒墙壁,设置边框或创建特定路径,我们需要做的就是在一个或两个数组元素中翻转位.
如何在16位整数上使用按位标志,这样我就可以设置这些位中的每一位并检查它们是否已设置.
我想以一种易读的方式(即Border.W,Border.E,Walls.N等)来实现.
这通常是如何在C++中完成的?我是否使用十六进制表示每一个(即Walls.N = 0x02,Walls.E = 0x04等)?我应该使用枚举吗?
另请参阅如何设置,清除和切换单个位?.
如果你想使用位域,那么这是一个简单的方法:
typedef struct MAZENODE { bool backtrack_north:1; bool backtrack_south:1; bool backtrack_east:1; bool backtrack_west:1; bool solution_north:1; bool solution_south:1; bool solution_east:1; bool solution_west:1; bool maze_north:1; bool maze_south:1; bool maze_east:1; bool maze_west:1; bool walls_north:1; bool walls_south:1; bool walls_east:1; bool walls_west:1; };
然后你的代码可以测试每个代码的真或假.
使用 std::bitset