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

    题目

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

    输入格式:

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

    输出格式:

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

    输入样例:

    5 3
    46 23 26 24 10
    5 4 3
    

    输出样例:

    24 23 10
    46 23 10
    26 10
    

    AC代码

    /*!
     * file 05-树7 堆中的路径.cpp
     *
     * author ranjiewen
     * date 2017/04/08 23:44
     *
     * 
     */
    
    #define MAXN 1001
    #define MINH -1001
    
    int H[MAXN], size;
    
    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;
    }
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int n, m;
    	int x;
    	int 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]); //可以将j=1输出 //这里不需要设标志输出控制
    		}
    		printf("
    "); 
    	}
    
    	return 0;
    }
    
    
  • 相关阅读:
    分时区查询问题解决
    .htaccess伪静态实例分享
    net mvc 小目标
    PHP中钩子函数的实现与认识
    session
    修改net基本三层 动软生产
    格式化问题
    数据字典
    关联数据和formatter问题-easyui+微型持久化工具
    说说JSON和JSONP,也许你会豁然开朗
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/6683581.html
Copyright © 2011-2022 走看看