Ejemplo n.º 1
0
Star pop(Heap *hp) {
    Star star = hp ->arr[0];
    swap(hp,0,hp ->length -1);
    hp ->length = hp ->length -1;
    filterDown(hp,0);
    return star;
}
Ejemplo n.º 2
0
void heapSort(std::vector<Type> &v, std::function<bool (const Type &lhs, const Type &rhs)> cmpFn) {

    // first heapify
    heapify(v, cmpFn);

    // remove from the heap, filterDown the root
    for (int i = static_cast<int>(v.size()) - 1; i >= 1; --i) {
        h_swap(v, 0, i);
        filterDown(v, i, 0, cmpFn);
    }
}
Ejemplo n.º 3
0
void update(Heap *hp,Star star) {
    for (int i=0;i< hp->length;i++){
	if (star.x == hp->arr[i].x && star.y == hp->arr[i].y) {
	    hp->arr[i].g = star.g;
	    hp->arr[i].h = star.h;
	    int f = hp->arr[i].f;
	    hp->arr[i].f = star.f;
	    if (f < star.f){
		filterDown(hp,i);
	    }else{
		filterUp(hp,i);
	    }
	    //break;
	}
    }
}
Ejemplo n.º 4
0
void filterDown(Heap *hp, int node) {
    int l = leftChild(node);
    int r = rightChild(node);
    int largest = 0;
    int heapMaxI = hp -> length - 1;
    if (l <= heapMaxI && hp ->func(hp ->arr[l],hp ->arr[node]))
	largest = l;
    else
	largest = node;

    if (r <= heapMaxI && hp ->func(hp ->arr[r],hp ->arr[largest]))
	largest = r;

    if (largest != node) {
	swap(hp,largest,node);
	filterDown(hp,largest);
    }else{
	return;
    }
}
Ejemplo n.º 5
0
void heapify(std::vector<Type> &v, std::function<bool (const Type &lhs, const Type &rhs)> cmpFn) {
    if (v.size() <= 1) return;
    for (int lp = static_cast<int>(lastParent(v.size())); lp >= 0; --lp)
        filterDown(v, v.size(), lp, cmpFn);
}