zoukankan      html  css  js  c++  java
  • 05-树7 堆中的路径

    将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。

    输入格式:

    每组测试第1行包含2个正整数NM(1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。

    输出格式:

    对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。

    输入样例:

    5 3
    46 23 26 24 10
    5 4 3
    

    输出样例:

    24 23 10
    46 23 10
    26 10

     1 #include <stdio.h>
     2  
     3 #define MaxN 1001
     4 #define MinH -10001
     5  
     6 int H[MaxN],size;
     7 
     8 //创建最小堆 
     9 void Creat()
    10 {
    11     size = 0;
    12     H[0] = MinH;//设置岗哨,根结点H[0]最小 
    13 } 
    14 
    15 //将X插入H。这里省略检查对是否已满的代码 
    16 void Insert(int X)
    17 {
    18     int i;
    19     for(i = ++size; H[i/2] > X; i/=2) //将大的元素下移,找到X的位置i 
    20         H[i] = H[i/2];
    21     H[i] = X;
    22 }
    23 
    24 int main()
    25 {
    26     int N,M,x;
    27     scanf("%d %d", &N, &M);
    28     Creat();
    29     for(int i = 0; i < N; i++) {
    30         scanf("%d",&x);
    31         Insert(x);
    32     }
    33     int j;
    34     for(int i = 0; i < M; i++) {
    35         scanf("%d",&j);
    36         printf("%d",H[j]);
    37         while(j > 1) {
    38             j /= 2;
    39             printf(" %d",H[j]);//控制格式 
    40         }
    41         printf("
    ");
    42     }
    43     return 0;
    44 }
     
  • 相关阅读:
    mysql联合主键自增、主键最大长度小记
    针对list集合进行分页展示
    初识javascript变量和基本数据类型
    12.19如何定义正则表达式
    人民币符号在html的显示方法
    windows下的NodeJS安装
    css 实现未知图片垂直居中
    IE678下placeholder效果,支持文本框和密码框
    jvm004 解析与分派
    jvm003 类加载的过程
  • 原文地址:https://www.cnblogs.com/kuotian/p/5351757.html
Copyright © 2011-2022 走看看