#include <iostream>
using namespace std;
const int inf = (1 << 31) - 1;
struct Node{
int x, y, z;
Node* xPre;
Node* xNext;
Node* yPre;
Node* yNext;
Node* zPre;
Node* zNext;
Node(int _x, int _y, int _z){
this->x = _x;
this->y = _y;
this->z = _z;
xPre = yPre = zPre = NULL;
xNext = yNext = zNext = NULL;
}
};
class AOI{
Node* head;
Node* tail;
AOI(){
head = new Node(-inf, -inf, -inf);
tail = new Node(inf, inf, inf);
}
~AOI(){
Node *cur = head;
while(cur != NULL){
cur = cur->xNext;
delete cur->xPre;
}
}
public:
Node* addNode(int x, int y, int z){
Node* newNode = new Node(x, y, z);
Node* curNode = head->xNext;
while(curNode != NULL){
if(newNode->x < curNode->x){
curNode->xPre->xNext = newNode;
newNode->xPre = curNode->xPre;
newNode->xNext = curNode;
curNode->xPre = newNode;
break;
}
curNode = curNode->xNext;
}
curNode = head->yNext;
while(curNode != NULL){
if(newNode->y < curNode->y){
curNode->yPre->yNext = newNode;
newNode->yPre = curNode->yPre;
newNode->yNext = curNode;
curNode->yPre = newNode;
break;
}
curNode = curNode->yNext;
}
curNode = head->zNext;
while(curNode != NULL){
if(newNode->z < curNode->z){
curNode->zPre->zNext = newNode;
newNode->zPre = curNode->zPre;
newNode->zNext = curNode;
curNode->zPre = newNode;
break;
}
curNode = curNode->zNext;
}
}
void leaveNode(Node* node){
node->xPre->xNext = node->xNext;
node->xNext->xPre = node->xPre;
node->yPre->yNext = node->yNext;
node->yNext->yPre = node->yPre;
node->zPre->zNext = node->zNext;
node->zNext->zPre = node->zPre;
delete node;
}
void moveNode(Node* node, int x, int y, int z){
leaveNode(node);
node = addNode(x, y, z);
}
};
int main()
{
return 0;
}
三维十字链表AOI算法
最新推荐文章于 2023-11-27 11:06:09 发布