堆中的路径需要太长时间

时间:2015-05-25 13:04:55

标签: c data-structures heap

这是来自oj PAT

的问题
  

将一系列给定数字插入最初为空的最小堆H.然后对于任何给定的索引i,您应该打印从H [i]到根的路径。

然而,我的代码总是超时,即需要很长时间。怎么解决?

main()
{
    int i,*a,n,m,k,data;
    scanf("%d%d",&n,&m);
    a=malloc(n*sizeof(int));
    a[0]=-10001;  //
    for(i=1;i<=n;i++)
    {
        scanf("%d",&data);
        heapAdjust(a,data);
    }   

    for(i=1;i<=m;i++)
    {
        scanf("%d",&k);
        printf("%d",a[k]);
        k=k/2;
    while(1)
    {
        printf(" %d",a[k]);
        if(k==1)
            break;
        k=k/2;
    }
    printf("\n");
    }
    free(a);
}
void heapAdjust(int a[],int data) // make heap
{
    static int size=0;
    int i;
    i=++size;
    for(;a[i/2]>data;i=i/2)
        a[i]=a[i/2];
    a[i]=data;
}

1 个答案:

答案 0 :(得分:1)

您可能遇到无限循环,因为k在某些时候变为零。

尝试将break循环中的while(1)条件从k == 1更改为k <= 1,看看是否有帮助。