作业介绍
哈夫曼编码
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int main(){
int n ;
cin >> n;
//创建一个 小根堆 优先队列,自动把最小的数放在最前面
priority_queue<int,vector<int> , greater<int>> min_heap;
//读入所有叶子节点的值
for(int i = 0 ; i < n ; i++){
int weight;
cin >> weight;
min_heap.push(weight);//把权值加入小根堆
}
int total = 0 ; //用于存储带权路径长度总和
//当堆中还有至少两个元素时,继续合并
while(min_heap.size() > 1){
//取最小的两个数
int a = min_heap.top();min_heap.pop();
int b = min_heap.top();min_heap.pop();
//计算他们的和
int sum = a + b ;
//把和加入总和
total += sum;
//把新生成的节点放回堆中
min_heap.push(sum);
}
cout << total << endl;
return 0;
}
- 状态
- 已结束
- 题目
- 5
- 开始时间
- 2025-6-8 0:00
- 截止时间
- 2025-6-16 23:59
- 可延期
- 24 小时