哈夫曼树
来源:互联网 发布:xalhar哈萨克音乐软件 编辑:程序博客网 时间:2024/05/01 13:50
很奇葩的哈夫曼树实现~~
但是OJ还是交不了,因为哈夫曼树建树的方式不唯一
只是记录一下,不建议这么写的
#include<iostream>#include <vector>using namespace std;const double eps = 1e-6;vector<int > v;struct huff{double value;huff* left;huff* child_l;huff* child_r;int i;bool is_leaf;bool visit;}*q;huff *p;void find(huff *p){v.clear();while(p->left != NULL){v.push_back(p->i);p = p->left; }//outputfor (int i=v.size()-1;i>=0;--i){cout<<v.at(i);}}void init(int n){for (int i=0;i<2*n-1;i++)p[i].is_leaf = true;//初始化不是leaf的for (int i=n;i<2*n-1;i++)p[i].is_leaf=false;//初始化所有childfor (int i=0;i<2*n-1; ++i){p[i].child_l = NULL;p[i].child_r = NULL;p[i].visit = false;}}//[lb,rb]范围排序void my_sort(int lb,int rb){huff tmp;for (int i=lb;i<rb;i++){for (int j=i;j<=rb;j++){if (p[i].value>p[j].value){//交换tmp=p[i];p[i]=p[j];p[j]=tmp;//同时他们的孩子的left也要交换if(p[i].child_l != NULL)p[i].child_l->left = p[i].child_r->left = &p[i];if(p[j].child_l != NULL)p[j].child_l->left = p[j].child_r->left = &p[j];}}}}int main(){//freopen("input.txt","r",stdin);int n;cin>>n;p=new huff[2*n-1];//分配huff数组double ori_arr[25];init(n);for(int i=0;i<n;i++){cin>>p[i].value; //输入ori_arr[i] = p[i].value;}int k=0;//cout<<"i == "<<i<<endl;for(int i=0;i<n-1;i++,k+=2) {my_sort(k,n+i-1); //从小到大排序p[i+n].value=p[k].value+p[k+1].value;p[k].i=0;p[k+1].i=1;p[k].left=p[k+1].left=&p[i+n];p[i+n].child_l=&p[k];p[i+n].child_r=&p[k+1];//cout<<"old: "<<k<<"->"<<k+1<<"->"<<i+n<<"\n";}p[n*2-2].left=NULL;p[n*2-2].i=1;// for(int j=0;j<2*n-1;j++)// cout<<p[j].i<<endl;for(int t=0;t<n;t++){for (int h=0;h<2*n-1;++h){if( p[h].is_leaf == true && p[h].visit == false && p[h].value == ori_arr[t] ){q=&p[h]; //q是代表各个叶子节点find(q);cout<<endl;p[h].visit = true;break;}}}return 0;}
0 0
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 页面置换算法
- 实战RPM包制作
- dynamica programming coins in line
- 强大的JS日期/时间选择控件(精确到天、小时、分钟都可以)
- [分享]关于mac的保修时间计算政策,附送延长保修时间秘诀
- 哈夫曼树
- 配置apache 支持 php
- leetCode 23. Merge k Sorted Lists (合并k个排序链表) 解题思路和方法
- 2015070610 - 看到很多所谓的大牛
- ubuntu shell脚本开机自动运行的方法
- 集合(1) list hash
- poj 2151 Check the difficulty of problems 概率dp
- asp.net 学习之路之gridView控件之修改数据
- css3动画2种区分