堆中的路径
来源:互联网 发布:考研大数据 编辑:程序博客网 时间:2024/06/07 13:21
将一系列给定数字插入到一个初始为空的最小堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。
输入样例:
5 3
46 23 26 24 10
5 4 3
输出样例:
24 23 10
46 23 10
26 10
以下是代码及分析:
#include <iostream>using namespace std;#define MAX 1001 //因为根结点从下标为1的地方开始,所以最大长度设为1001#define MIN -10001int H[MAX],size; //size表示当前堆的大小//Create建立一个空堆void Create(){ size = 0; H[0] = MIN; //因为根结点是从下标为一的地方开始,所以0这个地方是空缺的。此处将H[0]设为最小值,下面插入操作方便(不会产生越界)}//插入操作,从下往上作比较void Insert(int X){ int i; //因为是最小堆,所以父结点H[i/2]比子树小 for(i = ++ size; H[i/2] > X; i /= 2){ H[i] = H[i/2]; } //如果H[i/2]比X大,就用i/=2把i挪到上一个位置去 H[i] = X; //如果退出循环,就是父结点<=X,当前位置就是要插入的位置}int main(){ int n,m,x,i,j; cin>>n>>m; Create(); //堆初始化 for(i = 0;i < n;i++){ cin>>x; Insert(x); } //读入并建堆 //接下来的循环,每次循环都读入一个数,作为待查找的位置 for(i = 0;i < m;i++){ cin>>j; cout<<H[j]; //先打印这个位置的元素值 while(j>1){ //j这个位置到根结点的所有祖先都打印出来 j /= 2; cout<<" "<<H[j]; } cout<<endl; } return 0;}
1 0
- 堆中的路径
- 堆中的路径
- 堆中的路径
- PTA-堆中的路径
- 堆中的路径
- 堆中的路径
- 堆中的路径
- 堆中的路径
- 5-5 堆中的路径
- 5-5 堆中的路径
- 5-5 堆中的路径
- 05-树7 堆中的路径
- PTA数据结构 5-5 堆中的路径
- 05-树7 堆中的路径
- 05-树7 堆中的路径
- 05-树7 堆中的路径
- 5-5 堆中的路径 (25分)
- 05-树7 堆中的路径
- Python模块包中__init__.py文件 精髓
- 九度OJ 1111:单词替换 (查找)
- HashTable-HashMap(Android,Java最常见面试题)
- poj 3278 找牛
- Animation Clips(动画剪辑)
- 堆中的路径
- android学习路线:如何成长为高级工程师
- 【codevs1282】约瑟夫问题,卡数据ing?
- org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document fro
- LoadRunner自带实例安装问题could not open ftp port21-port is already used by another server
- 浅谈MDK环境下使用#include <stdio.h>的问题
- Py4JJavaError: An error occurred while calling o18.sql. : java.lang.RuntimeException:
- 《算法导论》读书笔记之最大子数组问题
- 面试中关于栈和队列的一些面试题,精选