C 優先佇列模板應用一 哈夫曼樹

2021-09-10 09:38:37 字數 1051 閱讀 3765

優先佇列:

priority_queueq; 建立乙個int型別的堆q, 預設為大根堆

priority_queue, greater>q; 定義乙個小根堆

q.push(x); 將元素x放入堆q中

int a = q.top(); 取出堆頂元素,即最小的元素儲存在a中

q.pop(); 彈出堆頂元素,取出後堆會自動調整為乙個新的小頂堆

#include標頭檔案

題目描述:

哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。

輸入:

輸入有多組資料。

每組第一行輸入乙個數n,接著輸入n個葉節點(葉節點權值不超過100,2<=n<=1000)。

輸出:

輸出權值。

樣例輸入:

51 2 2 5 9

樣例輸出:

37

解題思路:回顧一下,哈夫曼構造過程:每次取出權值最小的兩個結點,兩權值相加為新節點,且為剛才兩節點的父節點,同時該新節點放回序列,開始找新的最小的兩個權值,不斷重複。

#include

using namespace std;

priority_queue<

int, vector<

int>

, greater<

int>

> q;

//建立乙個小頂堆

intmain()

int ans =0;

//儲存答案

while

(q.size()

>1)

cout << ans << endl;

//輸出答案

}return0;

}

優先佇列 哈夫曼樹

哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和的最小值。輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點 葉節點權值不超過100,2 n 1000 輸出權值。示例1 ...

題目30 哈夫曼樹 優先佇列

普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 first in,largest out 的行為特徵。首先要包含標頭檔案 include,他和queue不同的就在於我們可以自...

優先佇列 修理牧場 哈夫曼樹

主要還是要記錄一下這個優先佇列 定義 priority queue 公升序佇列 priority queue int,vector int greater int q 降序佇列 priority queue int,vector int less int q 和佇列基本操作相同 top 訪問隊頭元素...