Example #1
0
void Insert(Heap* heap,int data){


if(heap->count==heap->capacity){
ResizeHeap(heap);
}
PercolateUp(heap,data);
heap->count++;
}
Example #2
0
void AStar::FoundNode(Node *current_point, Node *new_point)
{
	unsigned int g_value = CalculG(current_point, new_point->pos);

	if (g_value < new_point->g)
	{
		new_point->g = g_value;
		new_point->parent = current_point;
		PercolateUp(GetIndex(new_point));
	}
}
void PriorityQueue::InsertElement(int data)
{
    if(count == 0) 
    {
      A[0] = data;
      count++;
      return;
    }
    A[count] = data;
    count++;
    PercolateUp(count - 1);
}
void PriorityQueue::PercolateUp(int data)
{
   if(data == 0) return;
   int parent = Parent(data);
   if(parent != -1)
   {
      if(heap_type == MAX_HEAP && A[parent] < A[data] ||
	 heap_type == MIN_HEAP && A[parent] > A[data])
      {
	int temp = A[parent];
	A[parent] = A[data];
	A[data] = temp;
	PercolateUp(parent);
      }
   }
}
Example #5
0
void HeapSort(double *pList, int cbLength )
{
	int i;
	double tmp;
    
	for( i = 1; i < cbLength; i++ ) {
		PercolateUp( i, pList );
	}

	for( i = cbLength - 1; i > 0; i-- ) {
		tmp = pList[0];
		pList[0] = pList[i];
		pList[i] = tmp;

		PercolateDown( i - 1, pList );

	}
}
Example #6
0
void AddOpen(PathFinder* pf, int x, int y, Node* parent)
{
    if (x < 0 || x >= pf->map->width)
        return;
    if (y < 0 || y >= pf->map->height)
        return;

    // Ignore if the node isn't walkable
    if (GetTile(pf->map, x, y) == Wall)
        return;

    // Ignore if the node has already been checked before.
    if (pf->nodeMap[x][y].open == OnClosedList)
        return;

    if (pf->nodeMap[x][y].open == NoList)
    {
        pf->nodeMap[x][y].parent = parent;

        pf->nodeMap[x][y].g = ComputeG(pf, x, y, parent);
        pf->nodeMap[x][y].h = ComputeH(pf, x, y);
        pf->nodeMap[x][y].f = ComputeF(pf, x, y);

        pf->nodeMap[x][y].open = OnOpenList;
        QueueAdd(pf->openList, &pf->nodeMap[x][y]);
    }
    else if (pf->nodeMap[x][y].open == OnOpenList)
    {
        int g = ComputeG(pf, x, y, parent);

        // If this path we're currently searching is better, use it instead
        if (pf->nodeMap[x][y].g > g)
        {
            pf->nodeMap[x][y].parent = parent;

            pf->nodeMap[x][y].g = ComputeG(pf, x, y, parent);
            pf->nodeMap[x][y].h = ComputeH(pf, x, y);
            pf->nodeMap[x][y].f = ComputeF(pf, x, y);

            int index = QueueSearch(pf->openList, &pf->nodeMap[x][y]);
            PercolateUp(pf->openList, index, &pf->nodeMap[x][y]);
        }
    }
}
Example #7
0
void AStar::HandleFoundNode(Node *current_node, Node *target_node)
{
	unsigned int g_value = CalculGValue(current_node, target_node->pos);
	if (g_value < target_node->g)
	{
		target_node->g = g_value;
		target_node->parent = current_node;

		size_t index = 0;
		if (GetNodeIndex(target_node, index))
		{
			PercolateUp(index);
		}
		else
		{
			assert(false);
		}
	}
}