zoukankan      html  css  js  c++  java
  • 哈夫曼树

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

    题目描述:

    哈夫曼树,第一行输入一个数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; }
  • 相关阅读:
    零散的小知识0
    windows 安装touch指令
    sba
    jQuery中mouseenter vs mouseover 以及 mouseleave vs mouseout
    SSAS: Pareto Analysis
    SSAS: Display measures in Rows
    SSAS: Using DMV Queries to get Cube Metadata
    Do not execute sub-report when it's hidden in SSRS
    Read data from Excel XML file
    Concatenating Row Values in Transact-SQL
  • 原文地址:https://www.cnblogs.com/xym4869/p/8547826.html
Copyright © 2011-2022 走看看