#define MAXN 1001//堆的表示及其操作
#define MINH -10001
int H[MAXN],size;
typedef struct HeapStruct *MinHeap; //最大堆的创建
struct HeapStruct{
ElementType *Elements;//存储堆元素的数组
int Size;//堆的当前元素个数
int Capacity;//堆的最大容量
};
void Create()
{
size=0;
H[0]=MINH;//设置"岗哨"
}
void Insert(int X)//插入
{//将X插入H。这里省略检查堆是否已满的代码
int i;
for(i=++size;H[i/2]>X;i/=2)
H[i]=H[i/2];
H[i]=X;
}
int main()
{
int n,m,x,i,j;
scanf("%d %d",&n,&m);
Create();//堆初始化
for(i=0;i<n;i++){//以逐个插入方式建堆
scanf("%d",&x);
Insert(x);
}
for(i=0;i<m;i++){
scanf("%d",&j);
printf("%d",H[j]);
while(j>1){//沿根方向输出各结点
j/=2;
printf("%d",H[j]);
}
printf("\n");
}
return 0;
}
堆中的路径
最新推荐文章于 2019-01-26 14:17:42 发布