• 哈夫曼树


    (这个题之前做过一次,但用的方法,并不是堆栈的方法,结尾时贴一下,下面还是用标准的堆栈方法写。实际上熟悉了堆栈的方法,真的比数组方便很多啊!)

    题目描述:

    哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

    输入:

    输入有多组数据。
    每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。

    输出:

    输出权值。

    样例输入:
    5  
    1 2 2 5 9
    样例输出:
    37
    #include <iostream>
    #include<cstdio>
    #include<queue>
    using namespace std;
    
    /**使用优先队列
    **优先队列的语句:priority_queue<int> Q  默认大顶堆
    **定义小顶堆:priority_queue<int, vector<int>, greater<int> > Q
    */
    
    
    priority_queue<int, vector<int>, greater<int> > Q;
    int main()
    {
        int n;
        cin >> n;
        while(Q.empty() == false)
            Q.pop();//清空堆中元素
        int x;
        while(n--){
            cin >> x;
            Q.push(x);
        }
        int ans = 0;
        while(Q.size() > 1){
            int a = Q.top();
            Q.pop();
            int b = Q.top();
            Q.pop();
            ans += a+b;
            Q.push(a+b);
        }
        cout << ans << endl;
        return 0;
    }

    这种是每次进行排序,两个最小的相加成为新的值
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    //这个代码结果应该没问题,但过程嘛。。。应该不是这样写的。。。没有用到堆栈的写法。。。
    int main() {
        int nodeNum=0;
        cin >> nodeNum;
        int weight = 0;
        int node[1000];
        int a[1000];
        for (int i = 0; i < nodeNum; i++) {
            cin >> node[i];
        }
        sort(node, node + nodeNum);
        for (int i = 0; i < nodeNum; i++)
            a[i] = node[i];
        while (nodeNum != 2) {
            a[0] = a[0] + a[1];
    weight += a[0];
    for (int j = 1; j < nodeNum - 1; j++) a[j] = a[j + 1]; nodeNum--; sort(a, a + nodeNum); } weight = a[0] + a[1]; cout << weight << endl; return 0; }
  • 相关阅读:
    RSAUtils非对称加密
    计算日期之间的时间差
    面向注解的切面实现
    多个切面执行同一个方法
    spring切面拦截实现
    三种实现日志过滤器的方式 (过滤器 (Filter)、拦截器(Interceptors)和切面(Aspect))
    redis实现 msetex和 getdel命令
    mvn修改版本号命令
    shell脚本实例-while实现批量创建用户
    shell脚本实例-for实现批量主机的探测
  • 原文地址:https://www.cnblogs.com/xym4869/p/8547826.html
Copyright © 2020-2023  润新知