AOI主要有九宫格、灯塔和十字链表的算法实现。本文阐述十字链表的实现和尝试。
1. 基本原理
根据二维地图,将其分成x轴和y轴两个链表。如果是三维地图,则还需要维护多一个z轴的链表。将对象的坐标值按照大小相应的排列在相应的坐标轴上面。
2. 基本接口
对对象的操作主要有以下三个接口:
add:对象进入地图;
leave:对象离开地图;
move:对象在地图内移动。
2. 算法实现
既然是链表,很自然地想到用线性表来实现。因为存在向前和向后找的情况,所以使用双链表实现。其实实现也是非常简单,就是两个双链表(这里以二维地图举例)。那么我们的节点需要四个指针,分布为x轴的前后指针,y轴的前后指针。
// 双链表(对象)class DoubleNode
{public:
DoubleNode(string key, int x, int y)
{ this->key = key; &nbs

