/*	TSP priority_queue.h

	Header file for queue implementation
*/

/* Copyright 2003-2020 by Steven S. Skiena; all rights reserved.
Permission is granted for use in non-commerical applications
provided this copyright notice remains intact and unchanged.

These programs appear in my books:

"The Algorithm Design Manual" by Steven Skiena, second edition, Springer,
London 2008.  See out website www.algorist.com for additional information
or https://www.amazon.com/exec/obidos/ASIN/1848000693/thealgorith01-20

"Programming Challenges: The Programming Contest Training Manual"
by Steven Skiena and Miguel Revilla, Springer-Verlag, New York 2003.
See our website www.programming-challenges.com for additional information,
or https://www.amazon.com/exec/obidos/ASIN/0387001638/thealgorithmrepo/
*/



#include "tsp-astar.h"

#define PQ_SIZE 400000

/* [[[ tsp_priority_queue_struct_cut */
typedef struct {
    tsp_solution q[PQ_SIZE+1];	    /* body of queue */
    int n;                      /* number of queue elements */
} priority_queue;
/* ]]] */

void pq_init(priority_queue *q);
int pq_parent(int n);
int pq_young_child(int n);
void pq_swap(priority_queue *q, int i, int j);
void bubble_up(priority_queue *q, int p);
void bubble_down(priority_queue *q, int p);
void pq_insert(priority_queue *q, tsp_solution *x);
tsp_solution extract_min(priority_queue *q);
tsp_solution top_pq(priority_queue *q);
int empty_pq(priority_queue *q);
void print_pq(priority_queue *q);
void make_heap(priority_queue *q, tsp_solution s[], int n);
void make_heap1(priority_queue *q, tsp_solution s[], int n);
