|
|
1
2
我认为对你的迷宫有用的是某种双向的多链接单元格列表,本质上是一个链接单元格的图表,你可以向各个方向移动。您的每个单元格都有四个方向的相邻单元格,并有链接。
在这里
访问单元格的方法如下所示:
如果希望坐标轻松导出单元,可以在创建时指定坐标,具体取决于添加坐标的位置,例如,假设单元位于(0,1),然后使用方法在右侧创建单元
此外,通过拥有一个对象/引用(即您当前的位置)并将其更改为您要移动到的对象,可以轻松地从外部遍历链表。例如:
如果没有墙,“currentCell”现在将保留对起始单元格左侧单元格的引用。 |
|
|
2
1
一个非常简单的表示是字节的NxM矩阵(二维数组)。每面墙由两个位表示。由于每个单元格都有四面墙,所以您可以将所有四面墙存储在8位中。 将墙类型定义为:
现在,将左墙映射到两个低位,将顶墙映射到位2和3,以此类推。
通过对左列使用隐式左墙,对顶行使用隐式顶墙,可以节省大约一半的空间,但代码复杂度很低。然后,一个单元格只“拥有”两堵墙:底部和右侧。如果需要单元格的左墙,则可以查询相邻单元格的右墙。如果想要单元格的顶墙,可以查询上面单元格的底墙。这允许您将每个单元格存储在四位中。因此,您的数组大小为N/2 x M。查询左侧或顶部墙的速度稍慢(大约纳秒),因为它需要更多的指令。但您需要更少的内存访问来遍历整个迷宫。 |