Huffman树

来源:互联网 发布:知乎痴情叔被骂 编辑:程序博客网 时间:2024/06/05 00:13
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<stack>#define inf 0x3f3f3f3fusing namespace std;struct HTNode{    int w;    int parent,lchild,rchild;}h[110];int hCode[110][1010];int n;void selectMin(int m,int &pos,int &minx){    minx=inf;    for(int i=1;i<=m-1;i++)        if(h[i].parent==0&&h[i].w<minx)        {            pos=i;            minx=h[i].w;        }    h[pos].parent=m;}void HuffmanCoding(){    for(int i=n+1;i<=2*n-1;i++)    {        int s1,s2,min1,min2;        selectMin(i,s1,min1);        selectMin(i,s2,min2);        h[i].w=min1+min2;        h[i].lchild=s1;        h[i].rchild=s2;        h[i].parent=0;    }    for(int i=1;i<=n;i++)    {        int num=0;        int c=i;        for(int j=h[i].parent;j!=0;j=h[j].parent)        {            if(h[j].lchild==c)                hCode[i][num++]=0;            else                hCode[i][num++]=1;            c=j;        }        for(int j=num-1;j>=0;j--)            cout<<hCode[i][j];        cout<<endl;    }}int main(){    cin>>n;    for(int i=1;i<=n;i++)    {        cin>>h[i].w;        h[i].lchild=h[i].rchild=h[i].parent=0;    }    HuffmanCoding();    return 0;}

原创粉丝点击