堆中的路径

来源:互联网 发布:定额预算软件破解版 编辑:程序博客网 时间:2024/05/17 19:17

要求输入n个数,打印m次(从结点开始打印,指导根节点)
例如:
输入
5 3
36 25 10 38 24
5 4 3
打印
36 24 10
38 24 10
25 10

#include "stdio.h"#define MAXN 1001#define MINH -10001int H[MAXN], size;void Create(){    size = 0;    H[0] = MINH;    /* H[0] 一定为最小值作为哨兵 */}void Insert(int x){    if(size >MAXN){        printf("堆满\n");        return;    }    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;}
原创粉丝点击