最小堆的路徑

2021-09-16 13:58:02 字數 1030 閱讀 8623

本題完成最小堆的建立

將一系列給定數字插入乙個初始為空的小頂堆h。隨後對任意給定的下標i,列印從h[i]到根結點的路徑。

每組測試第1行包含2個正整數n和m(≤1000),分別是插入元素的個數、以及需要列印的路徑條數。下一行給出區間[-10000, 10000]內的n個要被插入乙個初始為空的小頂堆的整數。最後一行給出m個下標。

對輸入中給出的每個下標i,在一行中輸出從h[i]到根結點的路徑上的資料。數字間以1個空格分隔,行末不得有多餘空格。

題目的最小對堆建立後變成上述的樣子,因此查詢5,返回的路徑是24(下標為5),23,10

24 23 10

46 23 10

26 10

其中關鍵點在於:

#include

#include

#define maxsize 1001

#define minelement -10001

int heap[maxsize]

, size;

void

makeheap

(int n)

;//建立最小堆

void

print

(int i)

;//列印i節點的位置的路徑

void

insert

(int v)

;//向堆中插入元素

intmain()

return0;

}void

makeheap

(int n)

return;}

void

insert

(int v)

//向堆中插入元素

void

print

(int i)

//列印i節點的位置的路徑

最小堆及基於最小堆的最小優先佇列

最小堆具有的性質 最小堆的父親節點比子節點的值小 在最小堆的類中我們定義的函式主要有 維護最小堆 建立最小堆和利用最小堆進行排序 以下是最小堆的定義 ifndef my min heap h define my min heap h include includeusing namespace st...

C 最小堆的建立堆中的路徑

將一系列給定數字插入乙個初始為空的小頂堆h。隨後對任意給定的下標i,列印從h i 到根結點的路徑。每組測試第1行包含2個正整數n和m 1000 分別是插入元素的個數 以及需要列印的路徑條數。下一行給出區間 10000,10000 內的n個要被插入乙個初始為空的小頂堆的整數。最後一行給出m個下標。對輸...

最小堆的實現

這邊實現的是最小堆,最小堆是這樣定義的,首先堆是一棵完全二叉樹,每乙個節點都有乙個權值,滿足的條件是,父節點的權值總是大於等於子節點的權值 include using namespace std 最小堆類的定義如下 template class minheap template void minhe...