• sicily Huffman coding


    霍夫曼编码,这个是把霍夫曼树也建好了的!必须把输入改为char才能ac,好坑......

    http://soj.sysu.edu.cn/show_problem.php?pid=1002&cid=1740

     1 #include <iostream>
     2 #include <cstring>
     3 #include <queue>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <cstdio>
     7 
     8 using namespace std;
     9 
    10 struct HuffmanNode {
    11     char ch;
    12     int frequency;
    13     HuffmanNode *lc, *rc;
    14     HuffmanNode():ch(0), frequency(0), lc(NULL), rc(NULL){}
    15 };
    16 
    17 struct cmp {
    18     bool operator()(HuffmanNode* a, HuffmanNode* b)
    19     {
    20         return a->frequency > b->frequency;
    21     }
    22 };
    23 
    24 vector<int> v;     
    25 void code(HuffmanNode* r)    
    26 {     
    27     if(r->lc==NULL && r->rc==NULL)     
    28     {     
    29         cout << r->ch <<": ";     //打印字符的编码   
    30         for (int i = 0; i<v.size(); i++)     
    31             cout << v[i];     
    32         cout << endl;     
    33         v.pop_back(); //注意pop    
    34         return ;     
    35     }     
    36     if(r->lc)     
    37     {     
    38         v.push_back(0);     
    39            code(r->lc);     
    40     }     
    41     if(r->rc)     
    42     {     
    43         v.push_back(1);     
    44         code(r->rc);     
    45     }    
    46     if(!v.empty())       
    47         v.pop_back();  //注意pop         
    48 }    
    49 
    50 int main()
    51 {
    52     int n;
    53     cin >> n;
    54     char ch;// c;
    55     int f;
    56     
    57     priority_queue<HuffmanNode*, vector<HuffmanNode*>, cmp>q;
    58     
    59     for(int i=0; i<n; i++)
    60     {
    61         HuffmanNode* h = new HuffmanNode;
    62         cin >> ch >> f;
    63         //scanf("%c %d", &ch, &f);
    64         h->ch = ch;
    65         h->frequency = f;
    66         q.push(h);
    67     }
    68 
    69     int res=0;
    70     while(q.size() > 1)
    71     {
    72         HuffmanNode* temp1 = new HuffmanNode;
    73         temp1 = q.top();
    74         q.pop();
    75         HuffmanNode* temp2 = new HuffmanNode;
    76         temp2 = q.top();
    77         q.pop();
    78         
    79         HuffmanNode* temp = new HuffmanNode;
    80         temp->frequency = temp1->frequency + temp2->frequency;
    81         temp->lc = temp1;
    82         temp->rc = temp2;
    83         
    84         res += temp1->frequency + temp2->frequency;    
    85         q.push(temp);
    86     }
    87     cout << res << endl;
    88     HuffmanNode* root = q.top();
    89     //code(root);
    90     
    91     return 0;
    92 }
  • 相关阅读:
    PHP面向对象之接口 (interface)
    防止继承和覆盖(PHP类)
    对PHP中类、继承、抽象的理解(个人总结)
    AngularJS directive 分页,待续...
    facade(外观)模式
    command (命令)模式
    javascript设计模式 富有表现力的javascript
    AngulatJS $directive compile
    directive talks to controller
    testing
  • 原文地址:https://www.cnblogs.com/dominjune/p/4386752.html
Copyright © 2020-2023  润新知