数据结构与算法-7-5 堆中的路径

发布于 / 刷题 / 0 条评论

将一系列给定数字插入一个初始为空的小顶堆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

这道题使用数组,建立一个小顶堆,然后按照题意插入元素即可。

样例数据的堆长这个样子:

1532937173293754.png

代码如下:

#include <iostream>
#include <cstdlib>
#include <algorithm>
using namespace std;

int H[1001] = {-99999}, H_size, query_cnt;

void H_Insert(int n, int index){
    H[index] = n;
    for(int i = index; H[i/2] > H[i]; i /= 2){
        swap(H[i/2], H[i]);
    }
}

void print(int n){
    cout << H[n];
    for(int i = n/2; i > 0; i /= 2){
        cout << " " << H[i];
    }
}

int main(){
    cin >> H_size >> query_cnt;
    for(int i = 1; i <= H_size; i++){
        int n;
        cin >> n;
        H_Insert(n, i);
    }
    for(int i = 0; i < query_cnt; i++){
        int query;
        cin >> query;
        print(query);
        cout << endl;
    }
    return 0;
}

转载原创文章请注明,转载自: 斐斐のBlog » 数据结构与算法-7-5 堆中的路径
目前还没有评论,快来抢沙发吧~