AOI主要有九宮格、燈塔和十字鏈表的算法實(shí)現(xiàn)。本文闡述十字鏈表的實(shí)現(xiàn)和嘗試。
1. 基本原理
根據(jù)二維地圖,將其分成x軸和y軸兩個(gè)鏈表。如果是三維地圖,則還需要維護(hù)多一個(gè)z軸的鏈表。將對(duì)象的坐標(biāo)值按照大小相應(yīng)的排列在相應(yīng)的坐標(biāo)軸上面。
2. 基本接口
對(duì)對(duì)象的操作主要有以下三個(gè)接口:
add:對(duì)象進(jìn)入地圖;
leave:對(duì)象離開地圖;
move:對(duì)象在地圖內(nèi)移動(dòng)。
2. 算法實(shí)現(xiàn)
既然是鏈表,很自然地想到用線性表來(lái)實(shí)現(xiàn)。因?yàn)榇嬖谙蚯昂拖蚝笳业那闆r,所以使用雙鏈表實(shí)現(xiàn)。其實(shí)實(shí)現(xiàn)也是非常簡(jiǎn)單,就是兩個(gè)雙鏈表(這里以二維地圖舉例)。那么我們的節(jié)點(diǎn)需要四個(gè)指針,分布為x軸的前后指針,y軸的前后指針。
// 雙鏈表(對(duì)象)class DoubleNode {public: DoubleNode(string key, int x, int y) { this->key = key; &nbs