5-5 堆中的路径 (25分)

来源:互联网 发布:淘宝上买的东西靠谱吗 编辑:程序博客网 时间:2024/05/16 05:37

5-5 堆中的路径 (25分)

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

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

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

5 346 23 26 24 105 4 3

输出样例:

24 23 1046 23 1026 10

点击访问 PTA-测验
思路

#include<stdlib.h>#include<stdio.h>/* 评测结果 时间  结果  得分  题目  编译器     用时(ms)  内存(MB)  用户2016-08-28 06:36    答案正确    25  5-5     gcc     3   1   569985011测试点结果 测试点     结果  得分/满分   用时(ms)  内存(MB)测试点1    答案正确    13/13   2   1测试点2    答案正确    6/6     1   1测试点3    答案正确    2/2     1   1测试点4    答案正确    4/4     3   1查看代码*/typedef struct Heap{int *heap;int MaxSize;int MinData;}*MinHeap;void Insert(MinHeap,int);MinHeap Create(int);int main(){    int n,m;    scanf("%d%d",&n,&m);    MinHeap H=Create(n);int num;for(int i=0;i<n;i++){    scanf("%d",&num);    Insert(H,num);}for(int i=0;i<m;i++){    scanf("%d",&num);    for(int j=num;j>1;j/=2){        printf("%d ",H->heap[j]);    }printf("%d\n",H->heap[1]);}    return 0;}void Insert(MinHeap H,int X){//插入    int parent=++H->MaxSize;    for(;H->heap[parent/2]>X;parent/=2 ){        H->heap[parent]=H->heap[parent/2];    }    H->heap[parent]=X;}MinHeap Create(int MaxSize){//创建一个空的小顶堆 MinHeap H=(MinHeap)malloc(sizeof(struct Heap));H->heap=(int*)malloc(sizeof(int)*(MaxSize+1));H->MaxSize=0;H->MinData=-10001;H->heap[0]=H->MinData;//确保够xiao以起到哨兵作用 return H;} 
0 0
原创粉丝点击