示例#1
0
	// Loops through a list of pt_dist and finds the one with the smallest distance
	pt_dist get_min(std::vector<pt_dist *> v) {
		int len = (int)(v.size());

		pt_dist pd_min;
		if (len == 0) {
			return pt_dist();
		}
		else {
			pd_min = *(v.at(0));
		}

		for (int i = 1; i < len; i++) {
			pd_min = pd_min.dist < v.at(i)->dist ? pd_min : *(v.at(i));
		}

		return pd_min;
	}
void closest(struct KD_TREE *tree, struct Node *u, int k, struct Point *x, int h[], int *mndist) {
	if (u == NULL || heuristic(tree, h) >= *mndist)
		return ;
	int dist = pt_dist(&(u->pid), x), old;
	*mndist = min(*mndist, dist), old = h[k];
	if (x->d[k] < u->pid.d[k]) {    		
		closest(tree, u->lson, (k+1)%tree->kD, x, h, mndist);
		h[k] = abs(x->d[k] - u->pid.d[k]);
		closest(tree, u->rson, (k+1)%tree->kD, x, h, mndist);
		h[k] = old;
	} else {
		closest(tree, u->rson, (k+1)%tree->kD, x, h, mndist);
		h[k] = abs(x->d[k] - u->pid.d[k]);
		closest(tree, u->lson, (k+1)%tree->kD, x, h, mndist);
		h[k] = old;
	}
}