#include<stdio.h>
#include<stdlib.h>
typedef struct head
{
int *data;
int size;
int max;
}minhead;
minhead *create(int n)
{
minhead *s=(minhead*)malloc(sizeof(minhead));
s->data=(int*)malloc((n+1)*sizeof(int));
s->data[0]=-1000;
s->size=0;
s->max=n;
return s;
}
int isfull(minhead *s)
{
return(s->size==s->max);
}
void insert(minhead *s,int x) //插入最小堆
{
int i;
if(isfull(s))
printf("man");
i=++s->size;
for(;s->data[i/2]>x;i/=2)
s->data[i]=s->data[i/2];
s->data[i]=x;
}
void shuchu(minhead *s)
{
for(int i=1;i<=s->size;i++){
printf("%d ",s->data[i]);
}
}
int main()
{
minhead *s;
int n,m,i,x;
scanf("%d %d",&n,&m);
s=create(n);
for(i=0;i<n;i++){
scanf("%d",&x);
insert(s,x);
}
for(i=0;i<m;i++){ //打印路径
scanf("%d",&x);
printf("%d",s->data[x]);
for(x/=2;x>0;x/=2){
printf(" %d",s->data[x]);
}
printf("\n");
}
}
浙大数据结构——堆中的路径(最小堆)
最新推荐文章于 2024-10-11 23:30:30 发布